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 后缀名判断限制代码
Mar 31 NodeJs
NodeJs中的非阻塞方法介绍
Jun 05 NodeJs
NodeJS Express框架中处理404页面一个方式
May 28 NodeJs
搭建简单的nodejs http服务器详解
Mar 09 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
NodeJS使用七牛云存储上传文件的方法
Jul 24 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 NodeJs
nodejs中使用worker_threads来创建新的线程的方法
Jan 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
php中处理模拟rewrite 效果
2006/12/09 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
layui 上传插件 带预览 非自动上传功能的实例(非常实用)
2019/09/23 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
使用Python的判断语句模拟三目运算
2015/04/24 Python
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
深入学习Python中的装饰器使用
2016/06/20 Python
python集合常见运算案例解析
2019/10/17 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
Noon埃及:埃及在线购物
2019/11/26 全球购物
新闻学毕业生自荐信
2013/11/15 职场文书
个人实用的自我评价范文
2013/11/23 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
公证委托书格式
2014/09/13 职场文书
2015年幼儿教师个人工作总结
2015/05/20 职场文书
周一问候语大全
2015/11/10 职场文书
护理培训心得体会
2016/01/22 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL
Win10鼠标宏怎么设置?win10系统鼠标宏的设置方法
2022/08/14 数码科技