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 后缀名判断限制代码
Mar 31 NodeJs
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
基于nodejs实现微信支付功能
Dec 20 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
Nodejs中获取当前函数被调用的行数及文件名详解
Dec 12 NodeJs
Nodejs中的require函数的具体使用方法
Apr 02 NodeJs
5分钟教你用nodeJS手写一个mock数据服务器的方法
Sep 10 NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
Node.js实现爬取网站图片的示例代码
Apr 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程序?
2006/12/08 PHP
PHP 查找字符串常用函数介绍
2012/06/07 PHP
PHP生成数组再传给js的方法
2014/08/07 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
js资料prototype 属性
2007/03/13 Javascript
jQuery的强大选择器小结
2009/12/27 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
javascript如何定义对象数组
2016/06/07 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
快速理解 JavaScript 中的 LHS 和 RHS 查询的用法
2017/08/24 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
haskell实现多线程服务器实例代码
2013/11/26 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
《雨点》教学反思
2014/02/12 职场文书
员工拓展培训方案
2014/02/15 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
企业计划生育责任书
2015/05/09 职场文书
毕业欢送会致辞
2015/07/29 职场文书