我已经构建了一个位于安全端口443上的NodeJS TCP服务器。 我使用443来发送自定义数据,而不是发送HTTP代码段。 一切正常,直到有人试图导航到节点服务器的https地址。
如果有人要导航到我的节点服务器的https地址,请问如何发送404 Not Found HTTPS响应?
E.g:
if( isHTTPRequest ) {
socket.write("HTTP/1.1 404 Not Found");
return;
}
以上不起作用。
答案 0 :(得分:0)
您可以让openssl客户端执行困难的部分。查看他们的文档和示例。
答案 1 :(得分:0)
港口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()
。
您使用OpenSSL generate您的私钥,然后将CSR提交给Certificate Authority,他将为您提供将被广泛接受的证书。您也可以自签名,但默认情况下客户端不会接受自签名证书。
最后,鉴于您正在编写自定义服务器(而不是HTTP服务器),您不应该在端口443上侦听。约定说HTTPS服务器侦听端口443,而您的自定义协议不是HTTP。选择一个不同的端口,最好是isn't already assigned。