12

我使用创建了 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')
});

但是,现在我从我的应用程序中得到一个空响应,一条“未收到数据”消息。这可能是什么原因造成的?我对 SSL 以及它是如何工作的非常陌生,因此非常感谢任何帮助。

更多信息:我在我的 VPS 服务器(生产服务器)上生成了两个文件,key 和 csr 文件,现在我正试图让它们在我的本地主机上工作(首先,在我将代码提交到生产环境之前;我有在进行 git 提交之前测试它是否有效)。因此,这可能是因为我的本地主机(开发环境)与我的 VPS 服务器(生产环境)位于不同的域中。会是这样吗?如果是这样,我怎样才能使本地主机和生产环境使用相同的证书?

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

4

2 回答 2

38

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

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

如果您之前使用中间件将所有 http 请求转发到 https,您之前不会遇到此问题。此外,预计您的浏览器会抱怨证书,但无论如何都要继续(在 chrome 中这需要点击几下)。

于 2016-04-25T23:06:23.907 回答
3

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

于 2012-11-10T01:19:01.577 回答