检测连接是否加密(或未加密)
Detect connection is encrypted (or not)
我刚刚测试了我在官方 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
它运行良好,我可以连接到浏览器并收到证书警告(因为它是自签名的),然后点击接受页面。
What I need is not client or server authentication, just encryption!
我不会用浏览器连接服务器,这只是一个较长项目的开始,会有一个自定义客户端知道服务器未通过身份验证并忽略这个缺点。
我的疑虑与加密有关。有没有办法告诉 服务器端 ,如果连接实际上已经成功加密?或者,检测连接是否未加密如承诺?
default cipher suites configuration 仅支持提供强加密的密码套件。这意味着如果已建立连接,则将应用所选密码套件的加密。
但是,您应该强制使用 TLS 1.2 以防止通过 options:
进行协议降级攻击
const options = {
"key": fs.readFileSync("key.pem"),
"cert": fs.readFileSync("cert.pem"),
"secureProtocol": "TLSv1_2_method"
};
我刚刚测试了我在官方 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
它运行良好,我可以连接到浏览器并收到证书警告(因为它是自签名的),然后点击接受页面。
What I need is not client or server authentication, just encryption!
我不会用浏览器连接服务器,这只是一个较长项目的开始,会有一个自定义客户端知道服务器未通过身份验证并忽略这个缺点。
我的疑虑与加密有关。有没有办法告诉 服务器端 ,如果连接实际上已经成功加密?或者,检测连接是否未加密如承诺?
default cipher suites configuration 仅支持提供强加密的密码套件。这意味着如果已建立连接,则将应用所选密码套件的加密。
但是,您应该强制使用 TLS 1.2 以防止通过 options:
进行协议降级攻击const options = {
"key": fs.readFileSync("key.pem"),
"cert": fs.readFileSync("cert.pem"),
"secureProtocol": "TLSv1_2_method"
};