Node.js HTTPS服务器ERR_EMPTY_RESPONSE

时间:2012-11-10 00:48:11

标签: node.js ssl https ssl-certificate

我使用openssl req -nodes -newkey rsa:2048 -keyout server.key -out server.csr创建了server.key和server.csr文件。我用startssl.com创建了一个SSL证书,它给了我一个证书文件。然后在我的node.js应用程序中,我读取了密钥和证书文件:

var app = module.exports = express.createServer({
  key: fs.readFileSync('server.key'),
  cert: fs.readFileSync('server.cert')
});

但是,现在我从我的应用程序得到一个空的响应,“没有收到数据”消息。可能是什么导致了这个?我是SSL的新手,以及它如何运作,所以非常感谢任何帮助。

更多信息:我在我的VPS服务器(生产服务器)上生成了两个文件,密钥和csr文件,现在我正在尝试让它们在我的localhost上工作(首先,在我将代码提交到生产之前;我必须在进行git提交之前测试它是否有效)。因此,可能是因为我的localhost(开发环境)与我的VPS服务器(生产环境)位于不同的域。可能是这种情况吗?如果是这样,我如何将其发送到localhost和生产环境使用相同证书的位置?

或者,您是否建议我为我的开发环境创建另一个证书?我看到的唯一问题是,我的开发环境没有域名,因为它是在本地完成的。为了简单起见,我宁愿使用相同的证书(即使这意味着一个破坏的锁图标或localhost上的东西)。

2 个答案:

答案 0 :(得分:26)

我知道这是一个老问题,但今天我遇到了同样的事情。我会从快递(ERR_EMPTY_RESPONSE)获得相同的结果。

修复?请务必在测试浏览器中指定https,而不是http(例如https://localhost:8443)。

如果您以前使用过中间件将所有http请求转发到https,那么您之前就不会遇到此问题。此外,希望您的浏览器抱怨证书,但无论如何都要继续(在Chrome中需要多次点击)。

答案 1 :(得分:2)

您可以使用curl --insecure --verbose连接到您的应用程序来解决错误。通常,您不应在多个主机上使用SSL证书。您可以创建一个自签名的本地测试,并在生产中使用startssl。但无论如何,证书中的CN需要匹配用于连接到站点的主机名,以避免恼人的浏览器警告。您可以随时为您的计算机组建域名sam.local,并将其放在/ etc / hosts文件中,并在自签名证书和浏览器地址栏中使用。

相关问题