从 .p12 文件中提取 SSL MEAN 应用程序的正确格式的密钥和证书文件?

从 .p12 文件中提取 SSL MEAN 应用程序的正确格式的密钥和证书文件?

我正在我的 Mac 开发机器上为我的大学部门编写一个 MEAN 应用程序。我从 mean.io 的样板开始。在配置文件中config/env/all.js,有一个用于配置 SSL 的部分:

https: {
    port: false,

    // Paths to key and cert as string
    ssl: {
      key: '',
      cert: ''
    }
}

我知道我应该更改port:false为我用于 SSL 的端口,port:443并提供密钥和证书的文件路径。

我已采取的步骤:

  • ssl在应用程序根目录中创建目录
  • 在 Mac 上打开 Keychain Access
  • Certificates左侧,我右键单击我部门的 CA 颁发的 (DigiCert) 证书,然后单击Export
  • 另存Certificates.p12app_root/ssl
  • 当提示输入密码以保护导出的文件时,单击“确定”以跳过此操作

这就是我感到困惑的地方。根据找到的说明这里这些路径指向公钥和证书。如何从这个文件中提取公钥Certificates.p12,以及如何从中提取,certificate以便平均应用程序能够正确加载它?

我采取的其他步骤,尝试找到的说明这里

公钥生成

  • cd ssl
  • openssl pkcs12 -in Certificates.p12 -nocerts -nodes | openssl rsa > id_rsa
  • openssl rsa -in id_rsa -pubout > pubkey.txt

证书生成

  • openssl pkcs12 -in Certificates.p12 -clcerts -nokeys -out pubcert.txt

然后我进行如下设置:

https: {
    port: 443,

    // Paths to key and cert as string
    ssl: {
      key: rootPath + '/ssl/pubkey.txt',
      cert: rootPath + '/ssl/pubcert.txt'
    }
}

尝试运行服务器时,出现以下错误:

crypto.js:100
      c.context.setKey(options.key);
            ^
Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Object.exports.createCredentials (crypto.js:100:17)
    at Server (tls.js:1127:28)
    at new Server (https.js:35:14)
    at Object.exports.createServer (https.js:54:10)

任何帮助都将非常有帮助!

答案1

关注后这个简短的教程我尝试使用我的服务器的私人的密钥,而不是公钥。

从证书.p12 生成私钥:

openssl pkcs12 -in Certificates.p12 -nocerts -nodes > key.pem

从 Certifications.p12 生成公共证书:

openssl pkcs12 -in Certificates.p12 -clcerts -nokeys > cert.pem

然后我key: rootPath + '/ssl/key.pem'设置cert: rootPath + '/ssl/cert.pem'

服务器成功启动。我通过浏览器使用 https 和我分配的 https 端口连接到我部门的域名。它成功连接并显示绿色锁定图标。它从应用程序 index.html 下载了 html,但不会呈现任何内容 - 它只是在那里加载。服务器控制台记录了成功的 GET 请求,并带有 200 OK 代码响应。

相关内容