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学习笔记之网络编程
Aug 03 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
详解Nodejs基于mongoose模块的增删改查的操作
Dec 21 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
截获网站title标签之家内容的例子
2006/10/09 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
vue.js+elementUI实现点击左右箭头切换头像功能(类似轮播图效果)
2019/09/05 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
使用Python爬取最好大学网大学排名
2018/02/24 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
python地震数据可视化详解
2019/06/18 Python
tensorboard显示空白的解决
2020/02/15 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
canvas实现高阶贝塞尔曲线(N阶贝塞尔曲线生成器)
2018/01/10 HTML / CSS
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
法制宣传月活动方案
2014/05/11 职场文书
读群众路线的心得体会
2014/09/03 职场文书
记者节感言
2015/08/03 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
读《庄子》有感:美而不自知
2019/11/06 职场文书