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和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
nodejs的压缩文件模块archiver用法示例
Jan 18 NodeJs
NodeJS仿WebApi路由示例
Feb 28 NodeJs
详解nodejs中的process进程
Mar 19 NodeJs
详解nodejs微信公众号开发——6.自定义菜单
Apr 13 NodeJs
nodejs构建本地web测试服务器 如何解决访问静态资源问题
Jul 14 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
Nodejs中的JWT和Session的使用
Aug 21 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 NodeJs
NodeJS多种创建WebSocket监听的方式(三种)
Jun 04 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中常用数组处理方法实例分析
2008/08/30 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
2010/10/12 PHP
解析php类的注册与自动加载
2013/07/05 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
基于PHP制作验证码
2016/10/12 PHP
浅谈laravel orm 中的一对多关系 hasMany
2019/10/21 PHP
JS Array对象入门分析
2008/10/30 Javascript
Javascript 自定义类型方法小结
2010/03/02 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
Express之托管静态文件的方法
2018/06/01 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
JS使用iView的Dropdown实现一个右键菜单
2019/05/06 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
[58:59]完美世界DOTA2联赛PWL S3 access vs CPG 第一场 12.13
2020/12/16 DOTA
Python安装第三方库的3种方法
2015/06/21 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
Python3.7实现中控考勤机自动连接
2018/08/28 Python
django 使用全局搜索功能的实例详解
2019/07/18 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
2020/08/04 Python
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
幼儿园教师工作制度
2014/01/22 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
如何写早恋检讨书
2014/09/10 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
Java多条件判断场景中规则执行器的设计
2021/06/26 Java/Android