我从认证服务收到了两个文件:CSR.txt:看起来像这样:
-----BEGIN CERTIFICATE REQUEST-----
Code
-----END CERTIFICATE REQUEST-----
和 Private_Key.txt 格式相同,我试图在 Nginx 上设置它们,但每次我重新启动 Nginx 时总是出现此错误
failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib)
我已将 CSR.txt 重命名为 domain.crt,将 private_key.txt 重命名为 domain_key.key,我的 nginx 配置:
server {
listen 443;
server_name domain.com;
root html;
index index.html index.htm;
ssl on;
ssl_certificate /etc/ssl/certs/domain.crt;
ssl_certificate_key /usr/share/nginx/www/domain.com/domain_key.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP;
ssl_prefer_server_ciphers on;
location / {
try_files $uri $uri/ =404;
}
}
答案1
根据 ceejayoz 的说法。在大多数情况下,该过程的工作原理如下:
您生成:
cert.key
cert.csr (using cert.key)
您将 cert.csr 发送给认证服务 (CA)。CA 会向您发送:
cert.pem
cert.pem
是您签名的证书,看起来应类似于:
-----BEGIN CERTIFICATE REQUEST-----
MIICpjCCAY4CAQAwYTEaMBgGA1UEAxMRZG9jcy4zY2JldGEuY28udWsxDzANBgNV
...
efqf6gYqezWiXs1s5aNh363F1j+o7TWi0D5ayEBv/lihAmLs4dsaJzSvZiWVxnIr
5hUED99Ne1WUbg==
-----END CERTIFICATE REQUEST-----
密钥cert.key
看起来应该是这样的:
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAqXpfLXr2oRPwP+Pt4Az+iHldiHrIDnVW/uWY3MPvAJN8BWLe
...
f2UKtbEUsSDQ2BWiQia/3VUzLOlDArYxqA7kZFKes2z9ji8vobPG27o=
-----END RSA PRIVATE KEY-----
CSRcert.csr
看起来应该是这样的:
-----BEGIN CERTIFICATE REQUEST-----
MIIEqjCCApICAQAwZTEeMBwGA1UEAxMVZGV2Y2lyY3MuM2NiZXRhLmNvLnVrMQ8w
...
MctmU41Owfq+sIOGZ7G4zZqezUYownWt13hbprLk4DtWWEENRmvNinl0uCjAUA==
-----END CERTIFICATE REQUEST-----
一些 CA 会为您生成密钥和 CSR(startssl 可以做到这一点),但无论如何,要操作您的 nginx 站点,您只需要cert.pem
和key.pem
文件。您可以从证书源获取它们吗?
当你得到它们时你应该能够做到:
openssl rsa -in key.pem -modulus
openssl rsa -in cert.pem -modulus
这将打印出证书和密钥模数。它们必须匹配。
您可以使用以下方式转储请求:
openssl req -in cert.csr
希望有所帮助。
答案2
CSR 是要求表示证书,而不是证书。在大多数情况下,它是您生成的,而不是其他人生成的。
您的 SSL 提供商使用它来创建证书,然后将其提供给您(通常为 .crt 文件)。
顺便说一句,如果你生成私钥(因为它应该是私人的)。按照@davey 的说明构建一个并获取必要的 CSR。