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 npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 NodeJs
详解nodejs中express搭建权限管理系统
Sep 15 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
windows系统下更新nodejs版本的方案
Nov 24 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
2019/10/15 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
python交换两个变量的值方法
2019/01/12 Python
python实现AES加密和解密
2019/03/27 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
Keras SGD 随机梯度下降优化器参数设置方式
2020/06/19 Python
html5中如何将图片的绝对路径转换成文件对象
2018/01/11 HTML / CSS
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
PyQt QMainWindow的使用示例
2021/03/24 Python
校园新闻广播稿
2014/01/10 职场文书
高三霸气励志标语
2014/06/24 职场文书
2014年营业员工作总结
2014/11/18 职场文书
2015年植树节活动总结
2015/02/06 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书