我正在我的 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.p12
为app_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 代码响应。