Как получить .crt и .key из cert.pem и key.pem - PullRequest
0 голосов
/ 10 июля 2020

Я знаю, что это очень похожий вопрос на многие другие вопросы, но ни один из них не дает прямого ответа или того, который подходит мне ...

Я получил два файла от Let's encrypt:

  • cert.pem
  • key.pem

Мне нужно преобразовать их в формат crt и key для использования на nginx server.

Я пробовал:

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

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Расширение .pem указывает, что формат файла - PEM (Почта с улучшенной конфиденциальностью). Однако расширение ничего не говорит о содержимом файла. Содержимое может быть сертификатом, закрытым ключом, ключом publi c или чем-то еще.

Расширение .crt указывает, что содержимое файла является сертификатом. Однако расширение ничего не говорит о формате файла. Формат файла может быть PEM, DER (особые правила кодирования) или что-то еще. Если файл текстовый и содержит -----BEGIN CERTIFICATE-----, формат файла - PEM. С другой стороны, если файл является двоичным, весьма вероятно, что формат файла - DER.

Расширение .key указывает, что содержимое файла является закрытым ключом. Однако расширение ничего не говорит о формате файла. Формат файла может быть PEM, DER или другим. Если файл текстовый и содержит -----BEGIN PRIVATE KEY----- (или что-то подобное), формат файла - PEM. С другой стороны, если файл двоичный, весьма вероятно, что формат файла - DER.

На приведенных ниже диаграммах " Иллюстрированный сертификат X.509 " проиллюстрировать взаимосвязь между ASN.1 ( X.680 ), DER ( X.690 ), BASE64 ( RF C 4648 ) и PEM ( RF C 7468 ).

relationship among ASN.1, DER, BASE64 and PEM

relationship among ASN.1, DER, BASE64 and PEM (Application to X.509 Certificate

Both ssl_certificate и <a href="http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate_key" rel="nofollow noreferrer">ssl_certificate_key</a> of <a href="http://nginx.org/en/docs/http/ngx_http_ssl_module.html" rel="nofollow noreferrer">ngx_http_ssl_module</a> ожидают, что формат файла - PEM, как указано в справочном документе. Следовательно, вам не нужно изменять формат файлов ваших cert.pem и key.pem, потому что их расширение .pem указывает, что их формат файла уже PEM. Просто напишите, как показано ниже, в вашем файле конфигурации Nginx.

ssl_certificate     /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;

Если вы предпочитаете расширения .crt и .key, просто переименуйте их, как показано ниже.

$ mv cert.pem cert.crt
$ mv key.pem  key.key
0 голосов
/ 10 июля 2020

Если вы хотите настроить NGINX с помощью Let's Encrypt, вы можете сделать это автоматически с помощью приложения certbot.

Чтобы установить certbot для nginx:

на Ubuntu / Debian:

sudo apt install python-certbot-nginx

на Arch linux:

sudo pacman -S certbot-nginx

на Centos:

sudo yum install epel-release
sudo yum install certbot-nginx

Затем нужно сделать очень простой файл конфигурации для вашего домена. Каталог должен быть одинаковым для всех упомянутых операционных систем

/etc/nginx/sites-available/example.com

Здесь вы просто добавляете эту информацию:

server {
        listen 80;
        listen [::]:80;
        
        server_name example.com www.example.com;

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

Затем создайте символическую ссылку для активации домена

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Не забудьте заменить example.com своим доменом и переключить proxy_pass на вашу службу или каталог размещенных файлов.

Теперь вам следует перезапустить NGINX:

sudo nginx -t

Это вернет ошибку, если у вас есть ошибки в вашей конфигурации.

Если все в порядке, перезапустите NGINX

sudo systemctl restart nginx.service

Теперь на картинке появляется certbot :

sudo certbot --nginx -d example.com -d www.example.com

На этом этапе Let's encrypt попытается подключиться к вашему nginx серверу, и если все в порядке - это означает:

  • Настройки брандмауэра разрешают порт 80 и 443 для передачи
  • Переадресация портов через сеть для 2 портов разрешена

Затем вы можете выбрать простой или безопасный доступ. Я рекомендую вариант secure .

Когда вы нажмете [ввод], процесс будет завершен, и 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...