node.js - 在 expressjs PEM 例程 :PEM_read_bio:no start line 上设置 https

标签 node.js ssl express https

存在一些类似的主题,但没有一个有经过检查的答案或很多讨论。我正在尝试在 express js 上设置 https 服务器,但我得到了

crypto.js:100
      c.context.setKey(options.key);
            ^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line

我生成了我的 .csr.key 文件

  openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out myserver.csr

一个建议是按照以下说明将 .csr 转换为 .pem:http://silas.sewell.org/blog/2010/06/03/node-js-https-ssl-server-example/

那没用。

然而,express.js 文档 ( http://nodejs.org/api/https.html ) 将这两个文件显示为 .pem。如果这是问题所在,您将如何将 .key 文件转换为 .pem?此威胁部分有用 How to get .pem file from .key and .crt files?但如果有人知道 expressjs 需要什么,我觉得那是缺少的组件。

我如何检查文件是否符合 ANSI 标准,如果不符合则如何转换?

还有一些关于文件应该以-----BEGIN ENCRYPTED PRIVATE KEY-----还是-----BEGIN RSA PRIVATE KEY-开头的讨论----

非常感谢任何帮助。

最佳答案

所以我认为至少存在一点术语混淆,并且您那里的 node.js 示例将所有内容重命名为 .pem 也无济于事。

以下是 SSL 工作原理的一般概述:

您生成一对公钥和私钥。就我们而言,前者是您的“证书签名请求”(简称 CSR),后者是您的私有(private)签名 key (简称“您的 key ”)。

如果您想生成一个自签名证书(这对本地测试很有用),您可以转身使用您的 key 和 CSR 生成一个证书。此链接http://www.akadia.com/services/ssh_test_certificate.html非常清楚地了解如何在基于 *nix 的系统上执行此操作。

为了网络浏览器的目的,SSL 证书需要由受信任的机构共同签署,例如证书颁发机构 (CA)。您向 CA 支付费用以共同签署您的证书,并向浏览器供应商保证您的真实性(当您的网站向浏览器出示证书时,浏览器供应商会为您的网站显示一个绿色挂锁)。

共同签名过程从您将 CSR 上传到您的 CA 开始。然后他们将采用该 CSR 并生成您的证书。然后他们会为您提供几个证书、您的证书、他们的根证书,可能还有一些中间证书。

然后您需要形成一个组合证书,向浏览器证明真实性链。您实际上只需连接您的证书,然后是以根证书结尾的中间证书(以任何指定的顺序)即可完成此操作。这个组合证书就是您交给网络服务器的证书。

为了使您的 Web 服务器能够通过 SSL 提供服务,您需要将您的(组合)证书作为其公共(public)加密 key (它根据请求提供给 Web 浏览器)以及您的私有(private)加密 key ,以便它可以解密网络浏览器发送给它的流量。

所以。现在考虑到所有这些,您应该获取您拥有的 CSR 并将其提供给您的 CA,取回各种证书,将它们连接起来,然后在您的快速服务器中使用带有您的私钥的证书。

关于node.js - 在 expressjs PEM 例程 :PEM_read_bio:no start line 上设置 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26210859/

相关文章:

node.js - 如何在同一端口但在不同路径上一起使用 socketio 和 ws

javascript - 即使处理了被拒绝的 promise ,仍收到 `UnhandledPromiseRejectionWarning`

.htaccess - 如何将 https ://www. example.com 重定向到 https ://example. com

node.js - 如何处理 io.use 中间件捕获客户端错误?

node.js - 在CMD中设置多个PATH变量

node.js - 如何修复弃用警告 : Buffer()

c# - 使用 C# 使用 Assembly GetManifestResourceStream 方法读取资源文件

c# - 如何使用 HttpRequestMessage 发送证书?

javascript - Express js 聊天应用程序 :404 error on socket. io.js 文件

node.js - 通过 Sequelize (Express/NodeJS) 访问 mysql 时出错