关于443号港口没有任何魔法;它本质上并不能保证安全。它在功能上与端口442,444,80或任何其他端口相同。 443的唯一特别之处在于按照惯例,HTTPS服务器在该端口上侦听。
,使HTTPS服务器的安全问题是他们实施TLS protocol。 TLS是一种为应用程序提供安全通信通道的加密协议。 TLS提供安全性;服务器然后在TLS通道上运行常规HTTP。
TLS并不仅仅局限于HTTP服务器。任何应用程序均可使用它;它的高级API提供的数据流就像普通的TCP流一样工作。
幸运的是,节点includes a complete TLS implementation与net
模块提供的常规TCP流几乎完全API兼容。因此,而不是:
net.createServer(function(socket) {
socket.write('stuff that gets sent in the clear');
});
这样做:
tls.createServer({
cert: fs.readFileSync('cert.pem'), // the pem-encoded certificate
key: fs.readFileSync('key.pem'), // the private key that goes with your cert
ca: [] // you may need to include the CA's intermediate certs if applicable
}, function(socket) {
socket.write('stuff that will be encrypted');
});
同样,客户端使用tls.connect()
,而不是net.connect()
。
你generate你的私钥使用OpenSSL,然后提交CSR到Certificate Authority,谁会给你一个将被广泛接受的证书。您也可以自行签名,但自签名证书默认不会被客户接受。
最后,考虑到你正在写一个自定义的服务器(而不是HTTP服务器),你不应该在端口443上监听公约说,HTTPS服务器侦听端口443,和自定义的协议是不是HTTP 。选择一个不同的端口,最好是一个isn't already assigned。
你需要做完整的SSL握手。不知道它是否值得。 – Thilo
OMGOMGOMGOMGOMG – user3252291
请不要别想实现'HTTPS'你问这个问题的事实证明,你不知道有足够的了解安全就别想了。 (我不会让你失望......很少有人应该考虑实施安全系统)。 – Aron