本地开启https,配置nodeJs服务

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

  1. 公钥私钥的生成可用openssl(linux,mac自带,windows上需要自己安装)工具来生成,具体生成步骤如下:
javascript 复制代码
// 生成服务器端私钥
$ openssl genrsa -out server.key 1024 

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

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

  1. 生成自签名证书

CA(Certificate Authority,数字证书认证中心)

CA的作用是为站点颁发证书,且这个证书有CA通过自己的公钥和私钥实现的签名。通过CA机构颁发证书耗时耗力(贵啊!!!淘宝有单域名证书。。。)。这里使用自签名证书,说白了就说自己扮演CA机构,给自己颁发证书。

javascript 复制代码
//生成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. 使用express和https进行配置服务
javascript 复制代码
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的脚手架)

相关推荐
Jinuss7 小时前
HTML页面http-equiv=“refresh“自动刷新原理详解
http·html
寂寞恋上夜7 小时前
异步任务怎么设计:轮询/WebSocket/回调(附PRD写法)
网络·人工智能·websocket·网络协议·markdown转xmind·deepseek思维导图
Tao____7 小时前
基于Ruoyi开发的IOT物联网平台
java·网络·物联网·mqtt·网络协议
Yan-英杰10 小时前
BoostKit OmniAdaptor 源码深度解析
网络·人工智能·网络协议·tcp/ip·http
LaoZhangGong12314 小时前
学习TCP/IP的第2步:ICMP数据包
网络·网络协议·学习·tcp/ip·以太网
liulilittle14 小时前
DeepWiki: OPENPPP2 工程价值
网络·c++·网络协议·ai·信息与通信·通信
智慧的牛14 小时前
局域网内实现HTTPS
网络协议·https
✧˖‹gσσ∂ иιghт›✧15 小时前
esp32 s3 修改本地ip和服务器IP
服务器·网络协议·tcp/ip
qq_4112624215 小时前
优化wifi的性能,LWIP_TCP_WND是不是指的是DYNAMIC_RX_BUFFER动态接受缓冲区的缓冲区大小
网络·网络协议·tcp/ip
计算机小手16 小时前
内网穿透系列十六:使用 wg-easy 快速搭建基于 wireguard 的虚拟局域网,支持Docker部署
经验分享·网络协议·docker·开源软件