• 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的脚手架)

  • 相关阅读:
    iOS系列译文:自定义Collection View布局
    iOS系列译文:整洁的表视图代码
    各种类型的电影排行榜-movie路线
    学习正则
    sublime text 配置golang开发环境
    百度地图 Javascript API 笔记
    Sublime Text 3 若干问题解决办法
    无法修改系统Host的解决办法
    守望先锋overwatch美服外服设置方法
    Steam游戏黑屏与游戏直接安装方法
  • 原文地址:https://www.cnblogs.com/whm-blog/p/9413958.html
Copyright © 2020-2023  润新知