node.js express 启用 https
服务端和客户端各有一对公钥和私钥,使用公钥加密的数据只能用私钥解密,建立https传输之前,客户端和服务端互换公钥。客户端发送数据前使用服务端公钥加密,服务端接收到数据后使用私钥解密,反之亦如此。
公钥私钥的生成可用openssl(linux,mac自带,windows上需要自己安装)工具来生成,具体生成步骤如下
1: 生成服务端客户端公钥私钥
// 生成服务器端私钥
$ openssl genrsa -out server.key 1024 //生成服务端公钥
$ openssl rsa -in server.key -pubout -out server.pem
- 1
- 2
- 3
- 4
- 5
- 6
如果只使用公钥/私钥,会面临一个问题,中间人攻击。在客户端与服务端呼唤公钥的过程中,中间人对服务端充当客户端,对客户端充当服务端的角色。服务端和客户端很难感受到中间人的存在。如下所示
为了应对这种情况,还需要对得到的服务端公钥进行认证,确定这个公钥是来自你访问的网站。证书里包含了服务器的名称,主机名,服务端的公钥,签发证书机构的名称,来自签名颁发机构的签名。在客户端拿到公钥后会对签名的公钥进行检查是否来自目标服务器,这样避免中间人攻击,生成签名证书的过程如下,(需要用户输入的信息随便填写吧,偷偷懒 :)
2: 生成自签名证书
CA(Certificate Authority,数字证书认证中心)
CA的作用是为站点颁发证书,且这个证书有CA通过自己的公钥和私钥实现的签名。通过CA机构颁发证书耗时耗力(贵啊!!!淘宝有单域名证书。。。)。这里使用自签名证书,说白了就说自己扮演CA机构,给自己颁发证书。
//生成CA私钥$ openssl genrsa -out ca.key 1024//生成csr文件$ openssl req -new -key ca.key -out ca.csr//生成自签名证书$ openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt//生成server.csr文件$ openssl req -new -key server.key -out server.csr//生成带有ca签名的证书$ openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
使用express和https/http进行建站。
3: demo
var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');//同步读取密钥和签名证书
var options = {key:fs.readFileSync('./keys/server.key'),cert:fs.readFileSync('./keys/server.crt')
}var app = express();
var httpsServer = https.createServer(options,app);
var httpServer = http.createServer(app);app.get('/',function(req,res,next){res.send('Hello Express+https');
});
//https监听3000端口
httpsServer.listen(3000);
//http监听3001端口
httpServer.listen(3001);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
使用chrome访问自签名网站会提示不安全(选择继续就行)
使用脚手架工具生成的代码把app.listen 转接到httsServer.listen就可以了(暂未找到其他方法直接生成使用https的脚手架)
转载于:https://www.cnblogs.com/whm-blog/p/9413958.html
node.js express 启用 https相关推荐
- TWaver HTML5 + Node.js + express + socket.io + redis(六)
接上一篇TWaver HTML5 + Node.js + express + socket.io + redis(五), 这一篇将讲解如何用模版生成html页面, 如何验证用户登录, 您将了解到: 1 ...
- SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上
本教程迄今为止的前 54 个步骤,开发出来的 SAP UI5 应用都只能在本地通过 localhost 访问,除非将其部署到 ABAP 服务器上. SAP UI5 应用开发教程之三十五 - 如何把本地 ...
- node.js + express 初体验【hello world】
[node.js] 一个神奇的XX 呵呵 :) 不知道怎么形容他才好! [express] 是node.js 开发web应用程序的框架 开发环境:XP 大家共同进步吧 :) 一:前期准备: ...
- TWaver HTML5 + Node.js + express + socket.io + redis(五)
接上一回TWaver HTML5 + Node.js + express + socket.io + redis(四), 这一篇您将了解到 1. 如何保存更改后的拓扑数据 (包括新增的, 修改的, 删 ...
- Node.js Express+Mongodb 项目实战
Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很 ...
- 使用Node.js express 开发上传文件/图片api接口
我是傲夫靠斯,欢迎关注我的公众号[前端工程师的自我修养],每天更新. 今天我们来搞一个Node.js Express的上传文件功能,我使用了busboy这个库. Busboy是一个基于事件的文件流解析 ...
- SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...
- 跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-李宁-专题视频课程...
跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-8799人已学习 课程介绍 本课程采用的技术包括小程序开发.Node.js.Express和M ...
- 从零开始搭建Node.js, Express, Ejs, Mongodb服务器
http://www.toolmao.com/nodejs-express-ejs-mongodb-server 本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Ex ...
最新文章
- 李宏毅强化学习完整笔记!开源项目《LeeDeepRL-Notes》发布
- Windows 10版星巴克应用现身官网
- python新闻系统_干货 | Python 实现新闻系统内容的增删改查功能
- Jquery_如何扩展方法
- activepython win32com_activepython下载
- spring学习(22):分层架构
- 再议libcurl编程
- python编写函数showmsg(n、name)_Python语言答案
- 漏洞扫描产品评测打分项
- Go语言中的面向对象
- 怎么做 空间杜宾模型_利用STATA创建空间权重矩阵及空间杜宾模型计算命令
- STM32 光敏电阻传感器两路AD采集
- Serv-U FTP - v15.3.1.155特别版
- 常用会计科目名词解释
- vs商业智能项目的安装
- Scala基本语法-面向对象
- Linux学习134 Unit 5
- 深度学习系统框架的演进趋势
- 使用requests爬虫制作自己的天气预报“Api”
- 【Spring Boot】--整合RabbitMQ
热门文章
- 利用D触发器和异或门实现两个IO解读电机编码器的计数值和方向
- css-如何对每行中最后一个元素删除边距?
- 「浏览器插件」网址小尾巴终结者
- sscanf与正则表达式
- ant中的loading按钮使用
- [Redux/Mobx] 什么是单一数据源?
- [react] 在react中怎样改变组件状态,以及状态改变的过程是什么?
- [react] childContextTypes是什么?它有什么用?
- react学习(68)--ant design inputNumber
- 前端学习(3013):vue+element今日头条管理--手动触发验证