如何编写正确的HTTPS标头?

时间:2014-01-30 08:57:02

标签: node.js

我已经构建了一个位于安全端口443上的NodeJS TCP服务器。 我使用443来发送自定义数据,而不是发送HTTP代码段。 一切正常,直到有人试图导航到节点服务器的https地址。

如果有人要导航到我的节点服务器的https地址,请问如何发送404 Not Found HTTPS响应?

E.g:

if( isHTTPRequest ) {
  socket.write("HTTP/1.1 404 Not Found");
  return;
}

以上不起作用。

2 个答案:

答案 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