在 nginx 中托管 .p7b HTTPS 证书

Mic*_*ael 5 linux ssl nginx

我们需要将 Web 服务从 HTTP 更改为 HTTPS,因此我们生成了 .csr 并提供给我们的客户端并取回 .p7b 和 .cer 文件作为回报,以便在 linux 服务器上托管的 nginX 中使用它们。

我是 nginX 的新手,根据我的理解,.p7b 和 .cer 都是证书文件,但我很困惑我应该在ssl_certificate参数中使用哪个文件,或者我是否需要连接两个文件并将结果文件传递给ssl_certificate以提供服务目的?

server {

listen   443;
ssl    on;
ssl_certificate    /etc/ssl/your_domain_name.pem; (or bundle.crt)
ssl_certificate_key    /etc/ssl/your_domain_name.key;

server_name your.domain.com;
access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
location / {
root   /home/www/public_html/your.domain.com/public/;
index  index.html;
}

}
Run Code Online (Sandbox Code Playgroud)

我正在关注此链接中的不同链接,但找不到正确的答案。

谁能详细告诉我我应该如何使用它们?

PS:将问题从 StackOverFlow 转移到 SuperUser。

use*_*686 9

它们都包含相同的数据(大部分),但格式不同。Nginx 需要“普通” .crt 格式,但并非所有 CA 都包含必要的数据,因此您可能需要从 .p7b 转换。(另见https://superuser.com/a/123327/1686。)

ssl_certificate文件有两个要求:

  • 对于 nginx(和许多其他服务),它必须是文本格式,也就是“PEM 编码”格式,带有BEGIN CERTIFICATE标题。

    有时.cer文件是二进制格式。用文本编辑器检查;您可以使用openssl x509 -inform DER < thing.cer > thing.crt转换为文本格式。

  • 证书文件还必须包含中间证书- 再次使用文本编辑器打开(或使用certtool -i)。

    某些 CA 将它们作为单独的文件包含在内,在这种情况下,它们需要连接在一起(首先是您的证书,然后是中间体)。

既然你也得到了一个.p7b文件相同的证书,这可能是最简单的转换一个PEM证书文件:

openssl pkcs7 [-inform DER] -print_certs < thing.p7b > fullchain.crt
Run Code Online (Sandbox Code Playgroud)

生成的 .crt 文件应该包含所有必要的内容。