在 nginx、pem、bundle、crt 上安装 godaddy ssl 证书

Jac*_*aco 5 ssl nginx godaddy

根据可用的说明和论坛帖子,还不清楚如何处理从 Godaddy 购买 SSL 证书时从 Godaddy 获得的三个文件。Godaddy 并没有很直白地解释它。事后看来,现在当知道如何去做时,人们可能会认为他们不在购买时附带的说明中详细说明这一点是不明智的;因为让它发挥作用并非易事。

在 GoDaddy 购买标准 SSL 证书 (Starfield SHA-2) 或 (Godaddy SHA-2) 时。您指定您拥有的服务器类型并下载 zip 包。在此过程中,您还下载了两个txt文件。

对于 Nginx,您指定服务器类型“其他”,并且您的 zip 文件包含 3 个文件 (1-3)。在此过程中,还创建了另外两个文件(4-5),分别保存:

  1. 3423l4kj23l4j.crt
  2. 3423l4kj23l4j.pem
  3. sf_bundle-g2-g1.crt
  4. 生成的私钥.txt
  5. 生成的csr.txt

用记事本打开时,上面的1和2是相同的

'-----BEGIN CERTIFICATE-----
MM123XXXXXX
XXXXXXXO8km
-----END CERTIFICATE-----'
Run Code Online (Sandbox Code Playgroud)

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-----'
Run Code Online (Sandbox Code Playgroud)

generated-private-key.txt是独特的

'-----BEGIN PRIVATE KEY-----
XXXX7
XXXX8
-----END PRIVATE KEY-----'
Run Code Online (Sandbox Code Playgroud)

最后,generated-csr.txt, 也是唯一的

'-----BEGIN CERTIFICATE REQUEST-----
XXXX9
XXXX0
-----END CERTIFICATE REQUEST-----'
Run Code Online (Sandbox Code Playgroud)

在 Nginx 中:

  1. 我创建了一个文件夹,/etc/nginx/ssl
  2. 我编辑/etc/nginx/sites-enabled/default.conf如下

;

server {
        listen 80 default_server ;
        listen [::]:80 default_server ;
Run Code Online (Sandbox Code Playgroud)

我已将其更改为:

server {
        listen 443 ssl ;
        listen [::]:443 ssl ;
        server_name example.com;

        ssl_certificate /etc/nginx/ssl/ ?????????.crt;
        ssl_certificate_key /etc/nginx/ssl/ ???????.key;
Run Code Online (Sandbox Code Playgroud)

由于我有点不清楚什么是什么,以及 pem 和捆绑包是什么,我想问一下解压后的文件中的哪个在哪里?:

  • ssl_certificate= crt、pem、捆绑包、gen_crt?
  • ssl_certificate_key= pem 还是私钥?

更新 我按照@nikita-kipriyanov的建议做了,这有效。

  • 组合/连接方式:3423l4kj23l4j.pem sf_bundle-g2-g1.crt > fullchain.pem这将成为ssl_certificate文件
  • 将其重命名generated-private-key.txtprivkey.pem文件,然后更改其文件编码:sudo iconv -c -f UTF8 -t ASCII privkey.pem >> privkey.pem这将成为该ssl_certificate_key文件

Nik*_*nov 3

这取决于捆绑包内的内容。我确信它包含到受信任 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
Run Code Online (Sandbox Code Playgroud)

现在,只需将其传递到 Nginx 即可:

ssl_certificate fullchain.pem;
ssl_certificate_key privkey.pem;
Run Code Online (Sandbox Code Playgroud)

详细信息请参阅Nginx 手册