菜缤的世界 CairBin's Blog - HTTPS
type: channel
link: https://blog.cairbin.top/index.php/tag/HTTPS/
items: OpenSSL自签证书并基于Express搭建Web服务进行SSL/TLS协议分析

OpenSSL自签证书并基于Express搭建Web服务进行SSL/TLS协议分析
type: item
date: 2024-05-13T17:55:42+00:00
description: OpenSSL自签证书并基于Express搭建Web服务进行SSL/TLS协议分析起因最近在学习安全协议，大多数实验都是基于Windows下IIS，或者Linux下nginx搭建的Web服务，搭建环境和编写配置文件比较麻烦。而且我有多个不同环境的设备，折腾起来也比较麻烦，最好是开箱即用。所以我就用nodejs + express写了个跨平台的项目专门用于对比没有使用SSL/TLS的http与使用了的https协议。如果你对代码不感兴趣，仅是想要分析协议，可以到文章末尾的Github仓库中去下载该项目运行即可。搭建环境安装nodejs，访问官网https://nodejs.org，建议下载LTS版本并安装node --version npm --version运行上方命令出现版本号即可。在终端中运行如下命令安装yarnnpm -g install yarnyarn --version出现版本号即为成功。另外需要搭建OpenSSL环境，这个教程网上有很多，请自行搜索。代码部分接下来主要分享代码编写思路。目录结构创建项目目录为http_ssl，并在终端中进入mkdir http_ssl cd http_ssl使用yarn初始化，按照提示填写或者一路回车即可yarn init创建静态资源目录、配置文件目录、源码目录mkdir asset mkdir config mkdir src安装依赖添加express包等yarn add express在package.json文件中修改type为module，将语法为ES6，并编写启动命令scripts。（如果没有直接添加）"type":"module", "scripts":{ "start":"node ./src/index.js" }完整文件大致如下{ "name": "http_ssl", "version": "1.0.0", "main": "index.js", "author": "cairbin", "license": "MIT", "dependencies": { "express": "^4.19.2" }, "type":"module", "scripts":{ "start":"node ./src/index.js" } }初始文件我们希望http和https的端口号、主机地址之类的都能够放在配置文件里，而非代码中，这样方便我们更改，于是编写配置文件。touch config/config.js我们这里为了让配置文件能够像模块一样倒入，直接为js后缀，编辑该文件// config/config.js export default { server:{ static: '../asset', //静态资源目录，注意'../'，因为index.js在src下，否则找不到这个目录 http:{ host: "localhost", //主机地址 port: 8848 //端口号 }, https:{ host:'localhost', port:8849 } } }创建src/index.js为程序入口，我们编写的启动命令就是运行这个文件的touch src/index.js然后编写一个404.html的静态文件mkdir asset/html/ touch asset/html/404.html 404 Page 404 NOT FOUND 辅助模块项目还需要日志功能，我们没必要搞太复杂，想要功能强大的可以引入winston包，我这里就简单封装下js自带的console.*mkdir src/utils/ touch src/utils/logger.js// src/utils/logger.js const log = (options)=>{ console[options.type](`[${options.type.toUpperCase()}] ${options.msg}`) } const info = (msg)=>{ log({ type:"info", msg:msg }); } const warn = (msg)=>{ log({ type:'warn', msg:msg }); } const error = (msg)=>{ log({ type:'error', msg:msg }); } export default{ info,warn,error }控制器尽管是个Demo，但最好还是遵循MVC，我们创建目录和文件，编写一个简单控制器mkdir src/controller/ touch src/controller/defaultController.js// src/controller/defaultController…