nodejs express配置自签名https服务器的方法


Posted in NodeJs onMay 22, 2018

在nodejs中使用express来搭建框架可以说是非常的简单方便,但是一般默认创建的都是http服务器,也就是只能通过http协议进行访问。如今https已经是发展趋势,我们应该顺应时代的潮流。在本篇文章中,我们将会来使用自签名的方式创建证书,然后使用express框架来搭建https服务器,最后让浏览器或者客户端使用https协议进行访问。

首先我们要生成证书文件:

(1)生成私钥key文件(下面的pathway表示你要保存的文件路径位置)
 

openssl genrsa 1024 > /pathway/private.pem

(2)通过上面生成的私钥文件生成CSR证书签名

openssl req -new -key /pathway/private.pem -out csr.pem

(3)通过上述私钥文件和CSR证书签名生成证书文件

openssl x509 -req -days 365 -in csr.pem -signkey /pathway/private.pem -out /pathway/file.crt
 

此时生成的三个文件如下:

nodejs express配置自签名https服务器的方法

此时把这三个文件拷贝到你的nodejs项目目录下,比如我直接在项目根目录下新建certificate文件夹,然后放入三个文件:

nodejs express配置自签名https服务器的方法

 完成以上步骤后,修改项目的启动文件,我这里的启动文件是app.js,或者有人是server.js,以下代码实现都一样:

var express = require('express'); // 项目服务端使用express框架 
var app = express(); 
var path = require('path'); 
var fs = require('fs'); 
 
//使用nodejs自带的http、https模块 
var http = require('http'); 
var https = require('https'); 
 
//根据项目的路径导入生成的证书文件 
var privateKey = fs.readFileSync(path.join(__dirname, './certificate/private.pem'), 'utf8'); 
var certificate = fs.readFileSync(path.join(__dirname, './certificate/file.crt'), 'utf8'); 
var credentials = {key: privateKey, cert: certificate}; 
 
var httpServer = http.createServer(app); 
var httpsServer = https.createServer(credentials, app); 
 
//可以分别设置http、https的访问端口号 
var PORT = 8000; 
var SSLPORT = 8001; 
 
//创建http服务器 
httpServer.listen(PORT, function() { 
  console.log('HTTP Server is running on: http://localhost:%s', PORT); 
}); 
 
//创建https服务器 
httpsServer.listen(SSLPORT, function() { 
  console.log('HTTPS Server is running on: https://localhost:%s', SSLPORT); 
}); 
 
//可以根据请求判断是http还是https 
app.get('/', function (req, res) { 
  if(req.protocol === 'https') { 
    res.status(200).send('This is https visit!'); 
  } 
  else { 
    res.status(200).send('This is http visit!'); 
  } 
});

代码实现完成后,启动app.js脚本,可以使用"node app.js"命令来启动,或者在其他IDE中run, 然后在浏览器中访问(注意express不是系统内置模块,需要通过npm安装):

http访问:

nodejs express配置自签名https服务器的方法

https访问:

nodejs express配置自签名https服务器的方法

可以看到我们已经成功使用https来访问我们的服务器,但是Chrome浏览器却显示红色的Not Secure,这是因为这个证书是我们自建的,没有经过第三方机构验证,所以会出现警告的提示。后续博客我们会介绍如何申请经过认证的证书。

在Chrome浏览器中打开开发者模式,在安全Security页中可以看到当前页面的证书信息,如下所示:

nodejs express配置自签名https服务器的方法     

点击“View certificate”则可以看到证书的详情:

nodejs express配置自签名https服务器的方法

展开detail则可以看到我们创建证书的时候输入的各项证书信息。

同时我们也可以使用Postman来模拟客户端请求(实际开发中,服务端同学可以把证书发给客户端同学,经过简单配置就能实现https通信了):

http请求:

nodejs express配置自签名https服务器的方法

https请求:

nodejs express配置自签名https服务器的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
Nodejs多站点切换Htpps协议详解及简单实例
Feb 23 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
nodejs操作mysql实现增删改查的实例
May 28 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
详解从NodeJS搭建中间层再谈前后端分离
Nov 13 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 #NodeJs
解决nodejs的npm命令无反应的问题
May 17 #NodeJs
Mac下通过brew安装指定版本的nodejs教程
May 17 #NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 #NodeJs
nodejs前端模板引擎swig入门详解
May 15 #NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 #NodeJs
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
May 15 #NodeJs
You might like
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
人大复印资料处理程序_输入篇
2006/10/09 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
PHP二维数组去重算法
2016/12/17 PHP
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
编写Js代码要注意的几条规则
2010/09/10 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python判断字符串是否包含子字符串的方法
2015/03/24 Python
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python文件去除注释的方法
2015/05/25 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python Opencv将图片转为字符画
2021/02/19 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Python 读取WAV音频文件 画频谱的实例
2020/03/14 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
怎样声明接口
2014/09/19 面试题
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
企业宣传标语
2014/06/09 职场文书
尊师重教演讲稿
2014/09/04 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
win10搭建配置ftp服务器的方法
2022/08/05 Servers