美文网首页koa
基于KOA实现https访问

基于KOA实现https访问

作者: 李牧敲代码 | 来源:发表于2019-04-21 19:46 被阅读0次

    【知识背景】

    现在的网站但凡涉及到一些安全信息的都会走https协议(http + TLS)。这里的TLS(Transport Layer Security)指的是应用于传输层(TCP这层)的安全协议。
    https安全的原因在于他在传输的过程中对数据进行了加密,用抓包工具抓到的数据包的内容是加密过的(如果是HTTP的话的都是明文)。试想下,如果不用https,直接用wireshark这类抓包工具监听网卡上的信息,所有的信息包括用户名和密码都被抓去了,那登录验证的机制岂不是形同虚设?这就是https存在的意义。

    对称算法和非对称算法

    定义:能通过一个秘钥,双向加密和解密的算法称为对称算法(RC2,Base64);需要通过一对秘钥(公钥加密,私钥解密)加密和解密的算法称为非对称算法(MD5,HASH,RSA)。

    这里讲下HTTPS的大致流程。

    1. 客户端先下载服务端的数字证书(包含加密公钥)。
    2. 客户端随机生成一个值(内容秘钥),通过数字证书中预置的公钥(传输公钥)进行加密后传输给服务端。
    3. 服务端接受到信息后,用(传输私钥)进行解密获得内容私钥。之后双方基于这个内容私钥通过对称算法进行内容的加密和解密(用对称算法的原因是因为开销小),传输还是通过之前的非对称算法进行加密解密(性能开销大,但是更安全)。

    这里说下一般浏览器中会预置一些权威CA(权威证书颁发机构)的证书,这样浏览器可以直接进行访问。如果是自己制作的证书那么会跳下面这个界面,需要信任后才能访问。


    image.png

    下面总结下基于KOA实现HTTPS访问

    const Koa = require('koa')
    const logger = require('koa-logger');
    const sslify = require('koa-sslify').default;//http强制HTTPS
    const https = require('https');//node内置https server
    const fs = require('fs');
    const path = require('path');
    const serve = require('koa-static');//koa 静态资源插件
    const home = serve(path.resolve(__dirname, './dist'));
    const app = new Koa();
    app.use(logger())
    app.use(sslify())
    app.use(home)
    
    var options = {
        key: fs.readFileSync('./private_key.pem'),  //私钥文件路径
        cert: fs.readFileSync('./ca-cert.pem')  //证书文件路径
    };
    https.createServer(options, app.callback()).listen(9527, () => {
        console.log(`server running success at 9527`)
    });
    

    上面代码中的私钥文件路径和证书文件路径是通过git中预置的openssl生成的,具体的方式看下面代码:

    生成私钥的命令
     openssl genrsa -out private_key.pem 1024
    /*
    参数解释:genrsa -- 用RSA算法, 
    private_key.pem导出的私钥名称
    */
    
    image.png
    生成请求证书的命令
    openssl req -new -out ca-req.csr -key private_key.pem
    /*
    参数解释:ca-req.csr -- 证书请求名称, 
    private_key.pem前面生成的传输私钥的名称
    */
    
    image.png
    创建证书的命令
    openssl x509 -req -in ca-req.csr -out ca-cert.pem -signkey private_key.pem -days 3650
    
    image.png

    可以看到目录下已经生成对应的3个文件。


    image.png

    然后访问localhost:9527(之前已经在dist目录下预置了index.html)


    test3.gif

    【完】

    参考文献

    https://www.cnblogs.com/osbreak/p/9486188.html
    https://blog.csdn.net/xiaoming100001/article/details/81109617

    相关文章

      网友评论

        本文标题:基于KOA实现https访问

        本文链接:https://www.haomeiwen.com/subject/rmpcgqtx.html