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(一)--- Node.js简介及安装开发环境
May 20 NodeJs
nodejs中使用monk访问mongodb
Jul 06 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
详解使用PM2管理nodejs进程
Oct 24 NodeJs
Mac下通过brew安装指定版本的nodejs教程
May 17 NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 NodeJs
基于Koa(nodejs框架)对json文件进行增删改查的示例代码
Feb 02 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 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
用Socket发送电子邮件
2006/10/09 PHP
第十节--抽象方法和抽象类
2006/11/16 PHP
粗略计算在线时间,bug:ip相同
2006/12/09 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
PHP关联链接常用代码
2012/11/05 PHP
php绘制圆形的方法
2015/01/24 PHP
php for 循环使用的简单实例
2016/06/02 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
jquery下利用jsonp跨域访问实现方法
2010/07/29 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
js截取中英文字符串、标点符号无乱码示例解读
2014/04/17 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
input type=file 选择图片并且实现预览效果的实例
2017/10/26 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
python实现简单神经网络算法
2018/03/10 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
关于Theano和Tensorflow多GPU使用问题
2020/06/19 Python
如何使用python写截屏小工具
2020/09/29 Python
Linux内核产生并发的原因
2012/07/13 面试题
计算机应用毕业生自荐信
2013/10/23 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
二审代理词范文
2015/05/25 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android