我刚刚测试了我在官方node.js网站上找到的这个HTTPS服务器:
const https = require("https");
const fs = require("fs");
const options = {
"key": fs.readFileSync("key.pem"),
"cert": fs.readFileSync("cert.pem")
};
server = https.createServer(options, (req, res) => {
res.writeHead(200);
res.write("Hello!");
res.end();
});
server.listen(8000);
我使用openssl创建了两个自签名证书文件:
openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out cert.pem
它运行正常,我可以连接浏览器并获得证书警告(因为它是自签名的)并点击trhough来接受页面。
我需要的不是客户端或服务器身份验证,只是加密!
我不会使用浏览器连接到服务器,这只是一个较长项目的开始,并且会有一个自定义客户端知道服务器未经过身份验证并忽略了这个缺点。
我的疑虑与加密有关。有没有办法告诉服务器端,如果连接实际上已成功加密?或者,检测连接是否未加密 承诺?
答案 0 :(得分:1)
default cipher suites configuration仅支持提供强加密的密码套件。这意味着如果已建立连接,则将应用所选密码套件的加密。
但是,您应该强制使用TLS 1.2,以防止options中的协议降级攻击:
const options = {
"key": fs.readFileSync("key.pem"),
"cert": fs.readFileSync("cert.pem"),
"secureProtocol": "TLSv1_2_method"
};