Конфигурация nginx не работает с SSL ключом/pem (уникальный случай)

Вопрос или проблема

Я пытаюсь установить SSL на свой обратный прокси nginx с сертифицированными SSL-ключами, но получаю это сообщение при попытке перезапустить сервер:

Перезапуск nginx: [emerg]: SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/cert.key") завершился неудачей (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)
тест конфигурационного файла /etc/nginx/nginx.conf завершился неудачей

все файлы root:root с разрешениями 600
я проверил сертификаты, и они валидированы на этом сайте: http://ssltools.com/cert_key_match

в ключах нет посторонних символов, каждая строка содержит 64 символа

вот мой файл конфигурации

server {
    listen   443;
    server_name     my.domain.com;
    ssl on;
    ssl_certificate      conf.d/cert.pem;
    ssl_certificate_key  conf.d/cert.key;

    location / {
         proxy_pass         http://upstream1;
         proxy_redirect     off;
         proxy_buffering    off;
         proxy_set_header        Host            $host;
         proxy_set_header        X-Real-IP       $remote_addr;
         proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

Любые идеи? Спасибо

проверьте здесь

Я надеюсь, вы скопировали и вставили следующие строки:

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

Другое решение, которое может помочь другим:

используйте файл .pem для обоих ssl_certificate и ssl_certificate_key

То есть:

...
ssl on;
ssl_certificate      conf.d/cert.pem;
ssl_certificate_key  conf.d/cert.pem;
...

К вашему сведению, убедитесь, что ваш блок BEGIN идентичен ожидаемому блоку, символ в символ. У меня он начинался с четырех дефисов, а не пяти. ---- против -----. Сообщения об ошибках инструментов валидации не очень конкретны, когда вы делаете эту ошибку.

Я столкнулся с той же проблемой (из /var/log/nginx/error.log)

2019/03/20 01:25:41 [emerg] 2509#0: SSL_CTX_use_PrivateKey_file("/etc/nginx/conf.d/sslcert/mm.merchantspring.com.au.key") завершился неудачей (SSL: error:0906D06C:PEM routines:PEM_read_bio:no start line:Ожидается: ЛЮБОЙ ЧАСТНЫЙ КЛЮЧ error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib)

затем я обнаружил, что мой файл ключа также должен быть объединен с сертификатом. После обновления файла ключа и перезапуска nginx все заработало.

Моя среда:

Файл конфигурации Nginx выглядит так:

    ssl_certificate /etc/nginx/conf.d/sslcert/mywebsite.pem;
    ssl_certificate_key /etc/nginx/conf.d/sslcert/mywebsite.key;

mywebsite.pem (объединено, всего 4 сертификата. cat mywebsite.crt intermediate.crt > mywebsite.pem):

-----BEGIN CERTIFICATE-----
...

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...

-----END CERTIFICATE-----

mywebsite.key: (объединен с crt и key)

-----BEGIN CERTIFICATE-----
 ...
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----

Я получил файл ключа с сайта godaddy, вместо того, чтобы создавать его с помощью openssl. Но я думаю, что будет лучше, если сделать это с помощью openssl.

Я получил эту ошибку, потому что случайно использовал файл .cer вместо файла .key в директиве ssl_certificate_key.

VirtualHost *:80>
ServerName dnstv.top
SSLEngine on
SSLCertificateFile /path/to/certificate.crt
SSLCertificateKeyFile /path/to/private.key

DocumentRoot "/var/www/html"

Ответ или решение

Ошибка, с которой вы столкнулись при настройке SSL на вашем nginx-сервере, может быть связана с несколькими факторами. Подобные ситуации требуют тщательного анализа конфигурации и ключевых файлов. Рассмотрим все возможные причины и решения для этой проблемы.

Анализ текущей ситуации:

  1. Сообщение об ошибке:
    Система сообщает о неудачной попытке использовать файл /etc/nginx/conf.d/cert.key, ссылаясь на ошибки PEM_read_bio:no start line и SSL_CTX_use_PrivateKey_file:PEM lib. Это означает, что nginx не может должным образом интерпретировать ваш ключевой файл.

  2. Проверка формата файлов:
    Убедитесь, что формат ключей и сертификатов соответствует стандарту PEM. В начало и конец каждого файла должны быть включены строки:

    -----BEGIN CERTIFICATE-----
    <данные>
    -----END CERTIFICATE-----
    -----BEGIN PRIVATE KEY-----
    <данные>
    -----END PRIVATE KEY-----
  3. Права доступа и владельцы:
    Вы указали, что права доступа файлов установлены как 600 и владельцем является root. Это правильно для обычных случаев, но убедитесь, что nginx также имеет доступ для чтения этих файлов.

  4. Проверка путей в конфигурации nginx:
    Проверьте, что пути в конфигурации указаны корректно и указывают на правильные файлы. Это касается как ssl_certificate, так и ssl_certificate_key.

Возможные решения:

  1. Использование правильных файлов:
    Проверьте, что для директив ssl_certificate и ssl_certificate_key используются файлы с сертификатами и ключами, а не другие файлы, например .cer.

  2. Соответствие количества тире:
    Убедитесь, что строки, начинающиеся с -----, содержат именно пять тире. Это нередко приводит к ошибкам, если количество тире неверное.

  3. Использование одного файла .pem для обоих полей:
    Иногда решение может заключаться в использовании одного файла .pem для обеих директив. Такое решение может работать, если один файл содержит как сертификат, так и ключ.

  4. Проверка на наличие лишних символов:
    Убедитесь в отсутствии лишних или недопустимых символов в файлах сертификатов и ключей. Это касается как непечатаемых символов, так и пробелов.

  5. Создание новой пары ключей с использованием OpenSSL:
    Если проблема остаётся нерешённой, возможно попробовать создать новую пару сертификатов и ключей с помощью OpenSSL.

Заключение:

Проблемы с SSL в nginx часто связаны с неверной структурой или форматом ключевых файлов. Убедитесь, что все выполняется по стандартным процедурам — это зачастую самый надёжный путь к исправлению ситуации. Воспользуйтесь предложенными методами, чтобы устранить ошибку, и ваш сервер будет защищён с помощью надежного SSL-сертификата.

Оцените материал
Добавить комментарий

Капча загружается...