Heroku ssl certs: не удалось прочитать ключ, так как он защищен парольной фразой

У меня возникают проблемы при создании SSL-сертификатов, которые Heroku примет для secure.mydomain.com. Я использую DNSimple, Cedar Stack и следую инструкциям здесь: https://devcenter.heroku.com/articles/ssl-certificate

  1. Скопируйте server.key & server.orig.crt из DNSimple
  2. Получить сертификат корневого центра сертификации с $ curl https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem > rapidssl_bundle.pem
  3. Объединить в один файл с 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----часть).

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

Другие вопросы по тегам