首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从.crt和key.pem中获取cert.pem和key.pem

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

Stack Overflow用户
提问于 2020-07-09 21:12:10
回答 2查看 14.5K关注 0票数 3

我知道这是一个与许多其他问题非常相似的问题,但他们中没有一个给出一个直截了当的答案,或者一个对我有用的问题。

我从加密处得到了两个文件:

  • cert.pem
  • key.pem

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

我试过:

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

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

但是,在启动nginx时,请获得以下错误:

代码语言:javascript
复制
# 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-10 04:27:14

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

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

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

下面的"https://medium.com/@darutk/illustrated-x-509-certificate-84aece2c5c2e“图表说明了ASN.1 (X.680)、DER (X.690)、BASE64 (RFC 4648)和E 119PEME 220 (RFC 7468)之间的关系。

正如参考文档所述,ssl_certificatessl_certificate_key of ngx_http_ssl_module都期望文件格式是PEM。因此,您不必更改cert.pemkey.pem的文件格式,因为它们的文件扩展名.pem表示它们的文件格式已经是PEM。只需在Nginx配置文件中编写如下所示。

代码语言:javascript
复制
ssl_certificate     /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

如果您更喜欢.crt.key扩展,只需将它们重命名如下。

代码语言:javascript
复制
$ mv cert.pem cert.crt
$ mv key.pem  key.key
票数 10
EN

Stack Overflow用户

发布于 2020-07-10 00:42:29

当您想使用“让我们加密”设置NGINX时,可以使用应用程序certbot自动完成。

为nginx:安装certbot

关于Ubuntu/Debian:

代码语言:javascript
复制
sudo apt install python-certbot-nginx

在Arch linux上:

代码语言:javascript
复制
sudo pacman -S certbot-nginx

在Centos上:

代码语言:javascript
复制
sudo yum install epel-release
sudo yum install certbot-nginx

然后您需要为您的域创建一个非常简单的配置文件。对于所有上述操作系统,目录应该是相同的。

代码语言:javascript
复制
/etc/nginx/sites-available/example.com

在这里,您只需添加以下信息:

代码语言:javascript
复制
server {
        listen 80;
        listen [::]:80;
        
        server_name example.com www.example.com;

        location / {
                proxy_pass http://127.0.0.1:5000 #Example
        }
}

然后创建符号链接以激活域。

代码语言:javascript
复制
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

请记住使用域更改example.com,并将proxy_pass切换到托管文件的服务或目录。

现在您应该重新启动NGINX:

代码语言:javascript
复制
sudo nginx -t

如果您的配置中有错误,则此选项将返回一个错误。

如果一切正常,那么重新启动NGINX。

代码语言:javascript
复制
sudo systemctl restart nginx.service

现在certbot出现在图片中:

代码语言:javascript
复制
sudo certbot --nginx -d example.com -d www.example.com

此时,让我们加密到您的nginx服务器,如果一切正常-这意味着:

  • 防火墙设置允许端口80和443通过。
  • 允许两个端口通过网络进行转发。

然后,您将可以选择容易或安全的访问。我推荐安全的选择。

单击enter后,流程将完成,certbot将生成所有证书文件,并将它们添加到正确的路径中。

/etc/nginx/sites-avalible/example.com中的配置文件将使用所有正确的设置进行更新。

您可能需要再次重新启动nginx。

希望能帮上忙。祝好运

资料来源

https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04

https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-centos-7

https://wiki.archlinux.org/index.php/Certbot#Nginx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62823792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档