当前位置: 首页 > news >正文

本地开启https,配置nodeJs服务

服务端和客户端各有一对公钥和私钥,使用公钥加密的数据只能用私钥解密,建立https传输之前,客户端和服务端互换公钥。客户端发送数据前使用服务端公钥加密,服务端接收到数据后使用私钥解密,反之亦如此。

1. 公钥私钥的生成可用openssl(linux,mac自带,windows上需要自己安装)工具来生成,具体生成步骤如下:

// 生成服务器端私钥
$ openssl genrsa -out server.key 1024 //生成服务端公钥
$ openssl rsa -in server.key -pubout -out server.pem

如果只使用公钥/私钥,会面临一个问题,中间人攻击。在客户端与服务端呼唤公钥的过程中,中间人对服务端充当客户端,对客户端充当服务端的角色。服务端和客户端很难感受到中间人的存在。为了应对这种情况,还需要对得到的服务端公钥进行认证,确定这个公钥是来自你访问的网站。证书里包含了服务器的名称,主机名,服务端的公钥,签发证书机构的名称,来自签名颁发机构的签名。在客户端拿到公钥后会对签名的公钥进行检查是否来自目标服务器,这样避免中间人攻击,生成签名证书的过程如下,(需要用户输入的信息随便填写吧,偷懒的话可以一路敲回车)

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

3. 使用express和https进行配置服务

const https = require('https');
const fs = require('fs');
const path = require('path');
const express = require('express')
const ip = require("address").ip()
const app = express();
app.use(express.static("./"))
const options = {key: fs.readFileSync(path.join(__dirname, 'ssl/server.key')),cert: fs.readFileSync(path.join(__dirname, 'ssl/server.crt')),
};
const server = https.createServer(options, app);
server.listen(3000, () => {console.log(`server is running at ${ip}:3000/vnc.html`)
})

使用chrome访问自签名网站会提示不安全(选择继续就行)

使用脚手架工具生成的代码把app.listen 转接到httsServer.listen就可以了(暂未找到其他方法直接生成使用https的脚手架)

http://www.lryc.cn/news/246696.html

相关文章:

  • 项目中的svg图标的封装与使用
  • 文件服务器迁移
  • 虹科Pico汽车示波器 | 汽车免拆检修 | 2011款瑞麒M1车发动机起动困难、加速无力
  • 深度学习之图像分类(十五)DINAT: Dilated Neighborhood Attention Transformer详解(一)
  • 和数集团出席中科院上海高研院​第三十三期“高研交叉论坛”信息能源融合专场
  • GitHub----使用记录
  • 大数据平台/大数据技术与原理-实验报告--实战HDFS
  • C#中的事件(委托的发布和订阅、事件的发布和订阅、EventHandler类、Windows事件)
  • 世微 舞台灯深度调光 大功率 dc-dc降压恒流驱动IC APS54083
  • 【nlp】3.3 Transformer论文复现:2. 编码器部分(掩码张量、多头注意力机制、前馈全连接层)
  • vue3中shallowReactive与shallowRef
  • 蓝桥杯-动态规划-子数组问题
  • CDA一级备考思维导图
  • 【傻瓜级JS-DLL-WINCC-PLC交互】1.C#用windows窗体控件创建.net控件
  • Unity中Shader的BRDF解析(一)
  • 《软件工程原理与实践》复习总结与习题——软件工程概述
  • acwing算法基础之动态规划--线性DP和区间DP
  • 力扣 622.设计循环队列
  • 初识Linux(2).妈妈再也不用担心我Linux找不到门了。
  • 房屋租赁出售经纪人入驻小程序平台
  • 【计算方法与科学建模】矩阵特征值与特征向量的计算(五):乘幂法的加速(带有原点移位的乘幂法)
  • 2023年【起重机械指挥】考试题库及起重机械指挥考试资料
  • GoLang语言范围(Range)
  • 汽车电子 -- 车载ADAS之FCW(前方碰撞预警)
  • 爬虫系统Docker和Kubernetes部署运维最佳实践
  • 音视频5、libavformat-1
  • 【数据结构复习之路】树和二叉树(严蔚敏版)万字详解主打基础
  • nginx使用详解:转发规则、负载均衡、server_name
  • HarmonyOS 数据持久化 Preferences 如何在页面中对数据进行读写
  • ESP32-Web-Server编程- JS 基础 4