Как установить сертификат SSL LetsEncrypt на Heroku
Поскольку Heroku доступен только для чтения и не разрешает sudo, что мне нужно сделать, чтобы иметь возможность установить сертификат LetsEncrypt.org на своем сервере для моего приложения?
Если я уже установил config.force_ssl = true
, это имеет значение?
Ответы
Ответ 1
Я прочитал сообщение в блоге в первом ответе здесь, но я не хотел загрязнять свою кодовую базу URL-адресами и логикой ACME. Поэтому я сделал что-то подобное, но использовал проверку домена DNS...
С certbot укажите DNS как ваш предпочтительный вызов:
sudo certbot certonly --manual --preferred-challenges dns
После нескольких подсказок certbot сообщит вам, что для проверки вашего домена будет использоваться запись DNS TXT:
Please deploy a DNS TXT record under the name
_acme-challenge.www.codesy.io with the following value:
CxYdvM...5WvXR0
Once this is deployed,
Press ENTER to continue
У вашего регистратора домена, возможно, есть свои собственные документы для развертывания записи TXT. Сделайте это и вернитесь к certbot и нажмите ENTER - Let Encrypt проверит запись TXT, подпишет сертификат и certbot сохранит его для загрузки на герою.
Смотрите мое собственное сообщение в блоге для более подробной информации.
Вот две функции bash, которые вы можете использовать для автоматизации процесса для вас
function makessl {
sudo certbot certonly --manual --rsa-key-size 4096 --preferred-challenges dns -d ${1}
sudo heroku certs:add --type=sni /etc/letsencrypt/live/${1}/fullchain.pem /etc/letsencrypt/live/${1}/privkey.pem
}
function renewssl {
sudo certbot certonly --manual --rsa-key-size 4096 --preferred-challenges dns -d ${1}
sudo heroku certs:update /etc/letsencrypt/live/${1}/fullchain.pem /etc/letsencrypt/live/${1}/privkey.pem
}
Они принимают аргументы в пользу имени домена, и пока вы запускаете их из своего heroku app folder
, вам не нужно указывать --app NAME
Пример: makessl www.domain.com
Пример: renewssl www.domain.com
Объедините это @Eric, и вы хорошо пойдете:
heroku certs:auto:enable
Ответ 2
FYI, Heroku теперь предлагает автоматическое управление сертификатами с Let Encrypt, если вы запустите платный dyno. Вы можете включить его с помощью:
heroku certs:auto:enable
Дополнительная информация:
https://devcenter.heroku.com/articles/automated-certificate-management
Ответ 3
Изменить: этот ответ больше не применяется.
Это было написано до того, как Heroku внедрил встроенную поддержку LetsEncrypt. Оставляя остальное для потомков, но это уже не нужно. Теперь используйте @Eric answer.
Установка исходного сертификата
Вы можете использовать certbot в ручном режиме для генерации ответа на запрос, изменить свой сайт, чтобы вернуть этот ответ, а затем, наконец, завершить процесс подготовки certbot.
Подробнее см. в этом блоге Даниэлем Моррисоном или связанным ответом в разделе "Обновления сертификатов" ниже.
Обновления сертификатов
Как упоминал @Flimm, и как упоминается в связанном сообщении в блоге, вам придется обновлять его каждые 3 месяца, пока Heroku не обеспечит лучшую поддержку LetsEncrypt. Вы можете сделать этот процесс более плавным (без изменения кода для загрузки) с использованием переменной окружения, как описано в этом ответе (Node/Express, но концепции те же): fooobar.com/questions/456480/...
Sabayon
Существует проект GitHub, который может автоматизировать все это для вас, установив переменные среды Heroku. Это крошечный webapp, который вы устанавливаете как другое приложение Heroku, которое, в свою очередь, настраивает ваше основное приложение. Я еще не пробовал, но планирую использовать его вместо обновления моего сертификата в следующий раз: https://github.com/dmathieu/sabayon
Ответ 4
рекомендация по умолчанию в Heroku - это SSL с использованием имени сервера
(SNI), который является бесплатным. Поскольку вы уже получили свой сертификат и ключ, вы можете добавить их:
heroku certs:add <cert>.pem <key>.key
Если вам нужно поддерживать устаревшие браузерные клиенты, которые не поддерживают SNI, используйте
Ответ 5
лучшим способом может быть назначение нового домена ssl (который начинается с https) в ваш домен, который автоматически отменяет не-http-домен
Ответ 6
Я создал плагин certbot, который использует CLI Heroku для автоматизации аутентификации и установки сертификатов Let Encrypt: https://github.com/gboudreau/certbot-heroku
У меня есть только пример, который использует php-nginx buildpack Heroku, но чтение этого примера и поиск эквивалента для других buildpacks должно быть достаточно простым.
Запросы Pull могут помочь другим!