通过可用的说明和论坛帖子,有点不清楚如何处理从 Godaddy 购买 SSL 证书时从他们那里获得的三个文件。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
文件
这取决于捆绑包中的内容。我确定它包含到受信任 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 会话启动步骤中将这些证书发送给客户端)。如果您的捆绑包已经包含一个完整的链(即以终端服务器证书开头),那么所有工作都已为您完成并跳过以下步骤。
但是,如果它不包含完整的链,则您必须自己将其连接起来(看来这是您的情况):
现在,只需将其传递给 Nginx:
有关详细信息,请参阅Nginx 手册。