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、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
用nodeJS搭建本地文件服务器的几种方法小结
Mar 16 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
深入理解NodeJS 多进程和集群
Oct 17 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 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 split()函数的用法详解
2013/06/05 PHP
php number_format() 函数通过千位分组来格式化数字的实现代码
2013/08/06 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
js切换div css注意的细节
2012/12/10 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
移动端点击图片放大特效PhotoSwipe.js插件实现
2016/08/25 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
如何提高数据访问速度
2016/12/26 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
vue实现滚动鼠标滚轮切换页面
2020/12/13 Vue.js
深入Python解释器理解Python中的字节码
2015/04/01 Python
Python2中的raw_input() 与 input()
2015/06/12 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
一篇文章了解Python中常见的序列化操作
2019/06/20 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
品管员岗位职责
2013/11/10 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
教师年度考核评语
2014/04/28 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
教你用Python matplotlib库制作简单的动画
2021/06/11 Python
python中%格式表达式实例用法
2021/06/18 Python
Java 死锁解决方案
2022/05/11 Java/Android