Как установить сертификат 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 могут помочь другим!