Haproxy - невозможно загрузить закрытый ключ SSL из файла PEM
haproxy больше не запускается, он показывает ошибку
bind <ip>:443' : unable to load SSL private key from PEM file ...
Мы ничего не изменили в сертификатах или конфигурации. Начиная с последнего старта мы только делали обычные обновления для системы.
Чтобы найти ошибку, я сгенерировал совершенно новый сертификат (self signed), но ошибка все еще существует.
Это структура файла PEM:
-----BEGIN CERTIFICATE-----
MIIDXjCCAkY...
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
MIIEpgIBAAKC....
-----END RSA PRIVATE KEY-----
Я также попытался преобразовать закрытый ключ с помощью
openssl pkcs8 -topk8 -inform pem -in server.key -outform pem -nocrypt -out server_new.key
но haproxy по-прежнему показывает ту же ошибку.
Я пытаюсь часами, но я не могу найти причину. Пожалуйста помоги! Спасибо!
Update:
Проблема имеет какое-то отношение к доступу к файлу. Файл PEM хранился в /data/ssl/domainname/domainname.pem. Права файлов в порядке. Когда я перемещаю файл PEM в /etc/haproxy, все в порядке.
Ответы
Ответ 1
Проблема, с которой я столкнулась в CentOS, заключалась в том, что SELinux мешал. Чтобы проверить, является ли проблема SELinux, выполните следующие действия как root: setenforce 0
, затем попробуйте перезапустить haproxy. Если он работает, возникает проблема SELinux. (Теперь вы можете снова включить SELinux и попытаться устранить основную проблему с помощью команды setenforce 1
).
Поскольку у меня есть сертификаты в папке /etc/haproxy/certificates, следующая команда работала для получения правильных разрешений на файлы restorecon -v -R /etc/haproxy
(в зависимости от вашей ОС и конфигурации SELinux это может работать или не работать).
Ответ 2
Важным является порядок, в котором файлы сертификата и ключей отображаются в pem. Для создания файла pem используйте следующую команду.
cat example.com.crt example.com.key > example.com.pem
Ответ 3
Я также столкнулся с этой ошибкой. Возможно, вам захочется попытаться удалить кодовую фразу из закрытого ключа, прежде чем вы начнете разорвать ваши волосы. Это решило проблему для меня. Я думаю, что HAProxy должен попросить вас пароль при перезапуске, но в моем случае это не помогло, используя 'sudo/etc/init.d/haproxy restart
Чтобы удалить пароль, попробуйте
'openssl rsa -in [PRIVATE_KEY_FILE] -out nopassphrase.key'
Является ли кодовая фраза необходимой? Там обсуждение в ссылке ниже.
https://security.stackexchange.com/questions/70495/ssl-certificate-is-passphrase-necessary-and-how-does-apache-know-it
Ответ 4
Для меня проблема была вызвана этой строкой в объединенном файле PEM:
----- КОНЕЦ СЕРТИФИКАТА ---------- НАЧАТЬ ЧАСТНЫЙ КЛЮЧ RSA -----
После того, как я разделил его, я мог запустить HaProxy и загрузить его в порядке:
* ----- КОНЕЦ СЕРТИФИКАТА -----
----- НАЧАТЬ ЧАСТНЫЙ КЛЮЧ RSA ----- *
Надеюсь, что это поможет
Т
Ответ 5
Проблема для меня была странным персонажем в начале ключа.
Этот символ не отображался, когда я cat
редактировал файл, потому что символ был <feff>
, иначе известный как спецификация UTF-8 (порядок байтов Марк). Он появился только тогда, когда я открыл файл в vim.
Я бы не ожидал, что это будет очень распространено, но, надеюсь, это избавит кого-то от головной боли.