Node.js HTTPS服务器ERR_EMPTY_RESPONSE

Sam*_*Sam 7 ssl https ssl-certificate node.js

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

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

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

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

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

Mac*_*nle 27

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

修复?请务必在测试浏览器中指定https(而不是).httphttps://localhost:8443

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

  • 谢谢!这为我修好了 (2认同)
  • 你,互联网的老用户,让我免于3个小时的诅咒和自杀的意愿。 (2认同)

Pet*_*ons 3

您可以通过使用 连接到您的应用程序来排除错误curl --insecure --verbose。通常,您不应在多个主机上使用 SSL 证书。您可以制作一个自签名的版本以在本地进行测试并在生产中使用startssl。但无论如何,证书中的 CN 需要与用于连接到站点的主机名匹配,以避免出现烦人的浏览器警告。您始终可以为您的计算机创建一个域名,例如sam.local将其放入 /etc/hosts 文件中,并在自签名证书和浏览器地址栏中使用该域名。