如何从 cert.pem 和 key.pem 获取 .crt 和 .key

Sna*_*apa 1 ssl nginx

我知道这是一个与许多其他问题非常相似的问题,但他们都没有给出直接的答案或对我有用的答案......

我从 Let's encrypt 得到了两个文件:

  • 证书文件
  • 密钥文件

我需要将它们转换为crtkey格式以在 nginx 服务器上使用。

我试过了:

openssl rsa -outform der -in key.pem -out key.key

openssl x509 -outform der -in cert.pem -out cert.crt

但是在启动nginx时出现以下错误:

# service nginx restart
Performing sanity check on nginx configuration:
nginx: [emerg] cannot load certificate "/etc/ssl/nginx/cert.crt": PEM_read_bio_X509_AUX() failed (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)
nginx: configuration file /usr/local/etc/nginx/nginx.conf test failed
Run Code Online (Sandbox Code Playgroud)

Tak*_*aki 7

扩展名.pem表示文件格式为PEM(隐私增强邮件)。但是,扩展名并没有告诉任何有关文件内容的信息。内容可以是证书、私钥、公钥或其他东西。

扩展名.crt表示文件的内容是证书。但是,扩展名并没有告诉任何关于文件格式的信息。文件格式可能是 PEM、DER(特殊编码规则)或其他格式。如果文件是文本并且包含-----BEGIN CERTIFICATE-----,则文件格式为 PEM。另一方面,如果文件是二进制文件,则文件格式很可能是 DER。

扩展名.key表示文件的内容是私钥。但是,扩展名并没有告诉任何关于文件格式的信息。文件格式可能是 PEM、DER 或其他格式。如果文件是文本并包含-----BEGIN PRIVATE KEY-----(或类似内容),则文件格式为 PEM。另一方面,如果文件是二进制文件,则文件格式很可能是 DER。

下面来自Illustrated X.509 Certificate ”的图表说明了ASN.1 ( X.680 )、DER ( X.690 )、BASE64 ( RFC 4648 ) 和PEM ( RFC 7468 ) 之间的关系。

ASN.1、DER、BASE64和PEM之间的关系

ASN.1、DER、BASE64和PEM之间的关系(X.509证书的应用)

这两个ssl_certificatessl_certificate_keyngx_http_ssl_module期望,文件格式为PEM为基准原稿说。因此,你不必改变你的文件格式cert.pem,并key.pem因为他们的文件扩展名.pem表明它们的文件格式已经是PEM。只需在您的 Nginx 配置文件中像下面这样写。

ssl_certificate     /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
Run Code Online (Sandbox Code Playgroud)

如果您喜欢.crt.key扩展,只需像下面那样重命名它们。

$ mv cert.pem cert.crt
$ mv key.pem  key.key
Run Code Online (Sandbox Code Playgroud)