Heroku ssl certs: не удалось прочитать ключ, так как он защищен парольной фразой
У меня возникают проблемы при создании SSL-сертификатов, которые Heroku примет для secure.mydomain.com. Я использую DNSimple, Cedar Stack и следую инструкциям здесь: https://devcenter.heroku.com/articles/ssl-certificate
- Скопируйте server.key & server.orig.crt из DNSimple
- Получить сертификат корневого центра сертификации с
$ curl https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem > rapidssl_bundle.pem
- Объединить в один файл с
cat server.orig.crt rapidssl_bundle.pem > server.crt
Теперь у меня есть файлы server.key & server.orig.crt, которые я пытаюсь загрузить в Heroku с помощью $ heroku certs:add server.crt server.key
, Это дает ошибку
Key could not be read since it's protected by a passphrase.
В приведенных выше документах ничего не говорится об удалении ключевой фразы из файла server.key. Поэтому я покопался и нашел документы здесь: https://devcenter.heroku.com/articles/ssl. Я запускаю эти команды между #1 и #2 выше:
1б. $ mv server.key server.orig.key
1c. $ openssl rsa -in server.orig.key -out server.key
Однако это дает ошибку
unable to load Private Key
47930:error:0906D06C:PEM routines:PEM_read_bio:no start line:/SourceCache/OpenSSL098/OpenSSL098-47/src/crypto/pem/pem_lib.c:648:Expecting: ANY PRIVATE KEY
Что я подозреваю, означает, что не найден закрытый ключ.
Кто-нибудь знает, в чем здесь проблема? Это проблема Heroku или проблема openssl (или проблема DNSimple)?
6 ответов
Это действительно глупо, но, насколько я могу судить, была проблема с использованием TextEdit в Mac OS для сохранения исходных файлов server.key и server.orig.crt.
Я использовал TextMate, и все работает нормально.
Я просто сильно боролся с почти идентичной проблемой при установке SSL-сертификатов в приложении Heroku с DNSimple и RapidSSL, и хочу опубликовать здесь свое решение на случай, если кто-то с подобной проблемой столкнется с этим ответом.
Я следовал указаниям со всего мира в SO и центре разработки Heroku для установки сертификатов через DNSimple и RapidSSL, но каждый раз, когда я пытался добавить сертификаты с помощью команды:
$ heroku certs:add server.crt bundle.pem server.key
что бы я ни делал, я получил эту ошибку:
$ Adding SSL Endpoint to mysite... failed
! Key could not be read since it's protected by a passphrase.
! Read instructions on how to remove the passphrase on:
! http://www.madboa.com/geek/openssl/#key-removepass`
Я знал, что у ключа не было парольной фразы (потому что я проходил этот процесс несколько раз), но все равно не хотел их добавлять. Я сделал две вещи, которые в конечном счете заставили это работать, хотя я не уверен, какая из них была решающей.
Во-первых, я позаботился о том, чтобы загрузить соответствующий файл PEM в поле Apache, Plesk & CPA из ссылки электронной почты RapidSSL на промежуточные сертификаты.
Во-вторых, нужно было проверить мою установку инструментов Heroku, выполнив следующие действия: https://devcenter.heroku.com/articles/heroku-command
Оказывается, я все еще использовал драгоценный камень, и мне пришлось удалить его, пока я не попал в heroku-toolbelt, после чего я попытался снова добавить сертификаты и вуаля.
Боролись с этим вопросом на протяжении нескольких дней! Пока не наткнулся на эту ветку и не последовал совету по обновлению. Первое, что я должен был сделать, это
гем удалить геройку - все
Я ответил "Да" на вопрос о сохранении исполняемого файла из-за другого поста, который я прочитал в stackru. Затем я зашел на https://toolbelt.herokuapp.com/ и установил пояс для инструментов (хотя heroku --version говорил, что он был установлен). Модернизировал его до Heroku-Toolbelt 2.39.0. Повторил следующую команду, и она сработала:
Сертификаты героев: добавьте cert.cer bundle.pem server.key
Может быть, я наконец-то посплю сегодня вечером:)
Моя старая установка для инструментов была моей проблемой на окнах.
Даже если heroku update
изменил номер версии с 2.30.1 на 2.39.0, а heroku version
показал, что это не обновлялось правильно по некоторым причинам.
Я переустановил инструментальный пояс с https://toolbelt.herokuapp.com/ и попробовал снова, и все заработало.
heroku version
теперь говорит это для меня, и сертификаты: добавить работает правильно:
heroku-gem/2.39.0 (i386-mingw32) ruby/1.9.2
Теперь я получил ту же ошибку, даже с недавним
heroku/7.47.6
(из нпм). Причина оказалась в том, что я получил сертификат эллиптической кривой от Let's Encrypt, файл закрытого ключа содержал:
-----BEGIN EC PRIVATE KEY-----
Это не поддерживается в соответствии с https://devcenter.heroku.com/articles/acquiring-an-ssl-certificate:
Heroku поддерживает только ключи RSA для сертификатов. Клавиши эллиптической кривой не поддерживаются.
Как только я получил сертификат RSA, все заработало.
(в частности, обезвоженный теперь по умолчанию
--algo secp384r1
, я должен был предоставить
--algo rsa
. Но идея должна быть такой же с другими инструментами/центрами сертификации, вам нужен сертификат RSA.)
Для меня проблема заключалась в том, что 1Password изменил новые строки в сертификатах на пробелы, и замена пробелов обратно на новые строки помогла (в теле сертификата, конечно, не в
----BEGIN CERTIFICATE----
часть).
Поэтому проверьте содержимое сертификата/ключа, возможно, это проблема форматирования.