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教程 安装express及配置app.js文件的详细步骤
May 11 NodeJs
nodejs npm包管理的配置方法及常用命令介绍
Jun 05 NodeJs
Nodejs+express+html5 实现拖拽上传
Aug 08 NodeJs
NodeJS创建基础应用并应用模板引擎
Apr 12 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
PHPStorm中如何对nodejs项目进行单元测试详解
Feb 28 NodeJs
Nodejs中使用puppeteer控制浏览器中视频播放功能
Aug 26 NodeJs
5分钟教你用nodeJS手写一个mock数据服务器的方法
Sep 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
基于PHP Socket配置以及实例的详细介绍
2013/06/13 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
javascript重复绑定事件造成的后果说明
2013/03/02 Javascript
使用jQuery插件创建常规模态窗口登陆效果
2013/08/23 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
javascript函数中的3个高级技巧
2016/09/22 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
vue ssr 指南详读
2018/06/29 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
JS实现多选框的操作
2020/06/24 Javascript
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
python计算二维矩形IOU实例
2020/01/18 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
电力公司个人求职信范文
2014/02/04 职场文书
高中英语演讲稿范文
2014/04/24 职场文书
党建工作先进材料
2014/05/02 职场文书
人代会标语
2014/06/30 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
AI:如何训练机器学习的模型
2021/04/16 Python