服务端和客户端各有一对公钥和私钥,使用公钥加密的数据只能用私钥解密,建立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相关推荐

  1. TWaver HTML5 + Node.js + express + socket.io + redis(六)

    接上一篇TWaver HTML5 + Node.js + express + socket.io + redis(五), 这一篇将讲解如何用模版生成html页面, 如何验证用户登录, 您将了解到: 1 ...

  2. SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上

    本教程迄今为止的前 54 个步骤,开发出来的 SAP UI5 应用都只能在本地通过 localhost 访问,除非将其部署到 ABAP 服务器上. SAP UI5 应用开发教程之三十五 - 如何把本地 ...

  3. node.js + express 初体验【hello world】

    [node.js]  一个神奇的XX 呵呵 :) 不知道怎么形容他才好!  [express] 是node.js 开发web应用程序的框架  开发环境:XP 大家共同进步吧 :)  一:前期准备:  ...

  4. TWaver HTML5 + Node.js + express + socket.io + redis(五)

    接上一回TWaver HTML5 + Node.js + express + socket.io + redis(四), 这一篇您将了解到 1. 如何保存更改后的拓扑数据 (包括新增的, 修改的, 删 ...

  5. Node.js Express+Mongodb 项目实战

    Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很 ...

  6. 使用Node.js express 开发上传文件/图片api接口

    我是傲夫靠斯,欢迎关注我的公众号[前端工程师的自我修养],每天更新. 今天我们来搞一个Node.js Express的上传文件功能,我使用了busboy这个库. Busboy是一个基于事件的文件流解析 ...

  7. SAP UI5 应用开发教程之五十五 - 如何将本地 SAP UI5 应用通过 Node.js Express 部署到公网上试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 教程目录 SAP UI5 本地开发环境的搭建 SAP UI5 应用开发教程之一:Hello World SAP UI5 应用开发教程之二:SAP U ...

  8. 跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-李宁-专题视频课程...

    跟李宁老师做项目:小程序版网上商城(Node.js + Express + MySQL)-8799人已学习 课程介绍         本课程采用的技术包括小程序开发.Node.js.Express和M ...

  9. 从零开始搭建Node.js, Express, Ejs, Mongodb服务器

    http://www.toolmao.com/nodejs-express-ejs-mongodb-server 本文改自非鱼的<[翻译]前端开发人员入门指南,从零开始搭建Node.js, Ex ...

最新文章

  1. 李宏毅强化学习完整笔记!开源项目《LeeDeepRL-Notes》发布
  2. Windows 10版星巴克应用现身官网
  3. python新闻系统_干货 | Python 实现新闻系统内容的增删改查功能
  4. Jquery_如何扩展方法
  5. activepython win32com_activepython下载
  6. spring学习(22):分层架构
  7. 再议libcurl编程
  8. python编写函数showmsg(n、name)_Python语言答案
  9. 漏洞扫描产品评测打分项
  10. Go语言中的面向对象
  11. 怎么做 空间杜宾模型_利用STATA创建空间权重矩阵及空间杜宾模型计算命令
  12. STM32 光敏电阻传感器两路AD采集
  13. Serv-U FTP - v15.3.1.155特别版
  14. 常用会计科目名词解释
  15. vs商业智能项目的安装
  16. Scala基本语法-面向对象
  17. Linux学习134 Unit 5
  18. 深度学习系统框架的演进趋势
  19. 使用requests爬虫制作自己的天气预报“Api”
  20. 【Spring Boot】--整合RabbitMQ

热门文章

  1. 利用D触发器和异或门实现两个IO解读电机编码器的计数值和方向
  2. css-如何对每行中最后一个元素删除边距?
  3. 「浏览器插件」网址小尾巴终结者
  4. sscanf与正则表达式
  5. ant中的loading按钮使用
  6. [Redux/Mobx] 什么是单一数据源?
  7. [react] 在react中怎样改变组件状态,以及状态改变的过程是什么?
  8. [react] childContextTypes是什么?它有什么用?
  9. react学习(68)--ant design inputNumber
  10. 前端学习(3013):vue+element今日头条管理--手动触发验证