美文网首页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协议(http + TLS)。这里的TLS(Tra...

  • Koa集成koa-session

    学习目标 在koa项目中集成koa-session并实现记录访问次数 先安装模块 集成koa-session到项目...

  • 30lines Koa Midware core

    koa&中间件 koa的线上访问地址https://www.npmjs.com/package/koa。在这里有k...

  • koa-router 新解法

    基于koa的路由中间件 api兼容 koa-router[https://www.npmjs.com/packag...

  • 基于koa实现mvc

    之前使用了基于koa2的MVC结构的 egg 框架,大概理解是egg的使用规范。所以这里我们也简单的实现基于koa...

  • 8KOA 静态文件

    静态文件 使用 koa-static 中间件实现静态文件访问 安装中间件 使用中间件 使用 koa-mount 自...

  • egg入门-环境配置

    egg是阿里开发的一个强约束node框架,基于koa,所有koa插件都可以在egg上直接使用,详细请访问egg官网...

  • node+koa实现数据mock

    基于node+koa实现的mock数据接口,Koa需要v7.6.0以上node版本,低于此版本请先升级node 目...

  • koa-源码学习及最简实现

    一:简介 koa是基于nodejs平台的下一代web框架(官网描述)官网地址:https://koa.bootcs...

  • koa2.0的实现原理

    koa2.0基于async await / koa1.0基于generator koa 的大致流程,文件结构划分很...

网友评论

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

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