Вопрос или проблема
Я пытаюсь установить 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-сервере, может быть связана с несколькими факторами. Подобные ситуации требуют тщательного анализа конфигурации и ключевых файлов. Рассмотрим все возможные причины и решения для этой проблемы.
Анализ текущей ситуации:
-
Сообщение об ошибке:
Система сообщает о неудачной попытке использовать файл/etc/nginx/conf.d/cert.key
, ссылаясь на ошибкиPEM_read_bio:no start line
иSSL_CTX_use_PrivateKey_file:PEM lib
. Это означает, что nginx не может должным образом интерпретировать ваш ключевой файл. -
Проверка формата файлов:
Убедитесь, что формат ключей и сертификатов соответствует стандарту PEM. В начало и конец каждого файла должны быть включены строки:-----BEGIN CERTIFICATE----- <данные> -----END CERTIFICATE-----
-----BEGIN PRIVATE KEY----- <данные> -----END PRIVATE KEY-----
-
Права доступа и владельцы:
Вы указали, что права доступа файлов установлены как600
и владельцем являетсяroot
. Это правильно для обычных случаев, но убедитесь, что nginx также имеет доступ для чтения этих файлов. -
Проверка путей в конфигурации nginx:
Проверьте, что пути в конфигурации указаны корректно и указывают на правильные файлы. Это касается какssl_certificate
, так иssl_certificate_key
.
Возможные решения:
-
Использование правильных файлов:
Проверьте, что для директивssl_certificate
иssl_certificate_key
используются файлы с сертификатами и ключами, а не другие файлы, например.cer
. -
Соответствие количества тире:
Убедитесь, что строки, начинающиеся с-----
, содержат именно пять тире. Это нередко приводит к ошибкам, если количество тире неверное. -
Использование одного файла
.pem
для обоих полей:
Иногда решение может заключаться в использовании одного файла.pem
для обеих директив. Такое решение может работать, если один файл содержит как сертификат, так и ключ. -
Проверка на наличие лишних символов:
Убедитесь в отсутствии лишних или недопустимых символов в файлах сертификатов и ключей. Это касается как непечатаемых символов, так и пробелов. -
Создание новой пары ключей с использованием OpenSSL:
Если проблема остаётся нерешённой, возможно попробовать создать новую пару сертификатов и ключей с помощью OpenSSL.
Заключение:
Проблемы с SSL в nginx часто связаны с неверной структурой или форматом ключевых файлов. Убедитесь, что все выполняется по стандартным процедурам — это зачастую самый надёжный путь к исправлению ситуации. Воспользуйтесь предложенными методами, чтобы устранить ошибку, и ваш сервер будет защищён с помощью надежного SSL-сертификата.