从现有说明和论坛帖子来看,购买 GoDaddy SSL 证书后,如何处理从 GoDaddy 获得的三个文件有些不清楚。GoDaddy 对此解释得并不十分直接。事后看来,现在知道该怎么做了,人们可能会认为他们没有在购买时附带的说明中详细说明这一点是不明智的;因为让它工作起来并不容易。
在GoDaddy购买标准SSL证书(Starfield SHA-2)或(Godaddy SHA-2)时,请指明您的服务器类型,然后下载一个zip包。在此过程中,您还会下载两个txt文件。
对于 Nginx,您指定服务器类型为“其他”,并且您的 zip 文件包含 3 个文件(1-3)。在此过程中,还会创建另外两个文件(4-5),并分别保存:
- 3423l4kj23l4j.crt
- 3423l4kj23l4j.pem
- sf_bundle-g2-g1.crt
- 生成的私钥.txt
- 生成的csr.txt
在记事本中打开时,上面的1和2是相同的
'-----BEGIN CERTIFICATE-----
MM123XXXXXX
XXXXXXXO8km
-----END CERTIFICATE-----'
sf_bundle-g2-g1.crt
上面不包含 1 或 2,而是三个单独的条目
'-----BEGIN CERTIFICATE-----
XXXX1
XXXX2
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
XXXX3
XXXX4
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
XXXX5
XXXX6
-----END CERTIFICATE-----'
generated-private-key.txt
是独特的
'-----BEGIN PRIVATE KEY-----
XXXX7
XXXX8
-----END PRIVATE KEY-----'
最后,generated-csr.txt
也是独一无二的
'-----BEGIN CERTIFICATE REQUEST-----
XXXX9
XXXX0
-----END CERTIFICATE REQUEST-----'
在 Nginx 中:
- 我创建了一个文件夹,
/etc/nginx/ssl
- 我编辑
/etc/nginx/sites-enabled/default.conf
如下
;
server {
listen 80 default_server ;
listen [::]:80 default_server ;
我已将其更改为:
server {
listen 443 ssl ;
listen [::]:443 ssl ;
server_name example.com;
ssl_certificate /etc/nginx/ssl/ ?????????.crt;
ssl_certificate_key /etc/nginx/ssl/ ???????.key;
由于我不太清楚什么是什么,以及 pem 和 bundle 是什么,我想问一下解压后的文件中哪些内容放到了哪里?:
ssl_certificate
= crt、pem、bundle、gen_crt?ssl_certificate_key
= pem 还是私钥?
更新 我按照@nikita-kipriyanov 的建议去做了,成功了。
- 合并/连接:
3423l4kj23l4j.pem sf_bundle-g2-g1.crt > fullchain.pem
这将成为ssl_certificate
文件 - 将其重命名
generated-private-key.txt
为一个privkey.pem
文件,然后更改其文件编码:sudo iconv -c -f UTF8 -t ASCII privkey.pem >> privkey.pem
这将成为ssl_certificate_key
文件
答案1
这取决于包内的内容。我确信它包含到受信任 CA 的认证路径,问题是:它是否还包含最终服务器证书(就 Let's Encrypt 而言,它是“完整链”)或不包含(“链”)?此外,哪个文件包含私钥?
您可以通过使用文本查看器(记事本等)查看并比较内容来手动检查,因为 PEM 格式的捆绑包只不过是 Base64 格式的所有证书从服务器开始连接,然后是其颁发者 CA,依此类推。
您还可以剪切以-----BEGIN CERTIFICATE-----
开头的任何证书-----END CERTIFICATE-----
,包括将这两条特殊行放入专用文件中,并用 进行解码openssl x509 -in file.pem -noout -text
。这样,您就会确切知道捆绑包中有哪些证书。
如果 PEM 格式的文件包含类似以下内容-----BEGIN PRIVATE KEY----
:不要与任何人分享,保持秘密!
所有仅包含证书的文件-----BEGIN CERTIFICATE-----
都是公开的。您可以安全地向任何人展示它们(事实上,您会这样做,因为服务器在 SSL 会话启动步骤期间将这些证书发送给客户端)。
如果您的捆绑包已包含完整链(即以最终服务器证书开始),那么所有工作均已为您完成,请跳过以下步骤。
但是,如果它不包含完整的链,您必须自己将其连接起来(看起来这是您的情况):
cat server.crt bundle.pem > fullchain.pem
现在,只需将其传递到 Nginx 中:
ssl_certificate fullchain.pem;
ssl_certificate_key privkey.pem;
看Nginx 手册了解详情。