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 相关文章推荐
iPhone手机上搭建nodejs服务器步骤方法
Jul 06 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
Dec 30 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
Jan 05 NodeJs
nodejs 如何手动实现服务器
Aug 20 NodeJs
NodeJS 实现多语言的示例代码
Sep 11 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
Nodejs实现的操作MongoDB数据库功能完整示例
Feb 02 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 NodeJs
浅谈Node的内存泄露问题
May 06 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数据访问之查询关键字
2016/05/09 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
javascript禁用Tab键脚本实例
2013/11/22 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
2015/04/25 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python简单的函数定义和用法实例
2015/05/07 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
Collatz 序列、逗号代码、字符图网格实例
2017/06/22 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
python3 求约数的实例
2019/12/05 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
eDreams澳大利亚:预订机票、酒店和度假产品
2017/04/19 全球购物
Structs界面控制层技术
2013/10/11 面试题
行政专员岗位职责
2014/01/02 职场文书
同学会邀请书大全
2014/01/12 职场文书
《都江堰》教学反思
2014/02/07 职场文书
我的求职择业计划书
2014/04/04 职场文书
实习证明格式范文
2014/10/14 职场文书
2015年基建工作总结范文
2015/05/23 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
阿凡达观后感
2015/06/10 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
Java spring定时任务详解
2021/10/05 Java/Android