Ответ 1
Обновление:
Heroku теперь поддерживает LetsEncrypt изначально! Поэтому это обходное решение больше не требуется.
Инструкции здесь:
https://devcenter.heroku.com/articles/automated-certificate-management
Для новых приложений вам не нужно ничего делать, он включается по умолчанию.
Для приложений, созданных до 21 марта 2017 года, вы можете включить его с помощью этой команды Heroku cli:
heroku certs:auto:enable
Спасибо @Spain Train
Фон
В идеале LetsEncrypt позволяет автоматизировать процесс продления сертификата. Это сложнее сделать на Heroku, поэтому в этом ответе описывается, как использовать ручной процесс. Используя среду var Heroku, вы сможете легко обновлять свои сертификаты вручную, без изменений кода.
Кредит за этот ответ в значительной степени зависит от двух хороших сообщений в блоге:
https://medium.com/@franxyzxyz/setting-up-free-https-with-heroku-ssl-and-lets-encrypt-80cf6eac108e#.67pjxutaw
и
https://medium.com/should-designers-code/how-to-set-up-ssl-with-lets-encrypt-on-heroku-for-free-266c185630db#.ldr9wrg2j
Есть проект GitHub, который, по-видимому, поддерживает автоматические обновления сертификатов на Heroku. Я обновлю этот ответ, когда попробую: https://github.com/dmathieu/sabayon
Использование LetsEncrypt на Heroku с помощью приложения Node Express
Получить готовый сервер:
Добавьте это промежуточное программное обеспечение в свое приложение Express. Обязательно добавьте его перед любым промежуточным программным обеспечением, которое перенаправляет http на https, поскольку эта конечная точка должна быть http.
// Read the Certbot response from an environment variable; we'll set this later:
const letsEncryptReponse = process.env.CERTBOT_RESPONSE;
// Return the Let Encrypt certbot response:
app.get('/.well-known/acme-challenge/:content', function(req, res) {
res.send(letsEncryptReponse);
});
Создайте файлы сертификатов с помощью certbot:
- Запустить certbot:
sudo certbot certonly --manual
Введите URL-адрес сайта при появлении запроса (www.example.com)
certbot отобразит строку ответа на вызов в формате
xxxxxxxxxxxxxxxxxxx.yyyyyyyyyyyyyyyyyy
ОСТАВЛЯЙТЕ КЕРТБОТ, ОЖИДАЕМЫЙ В ЭТОМ СОСТОЯНИИ. Не нажимайте еще раз, чтобы войти или выйти. - Перейдите на панель инструментов Heroku и просмотрите настройки приложения:
https://dashboard.heroku.com/apps/your-heroku-app-name/settings
В разделе "Конфигурируемые переменные" нажмите "Отобразить конфигурации Vars"
Измените значение переменной CERTBOT_RESPONSE в соответствии с ответом на вызов с шага a. - Подождите, пока приложение heroku перезагрузится.
- Проверьте настройки, посетив
http://www.example.com/.well-known/acme-challenge/whatever
ПРИМЕЧАНИЕ HTTP, а не HTTPS
Он должен отображать строку ответа на вызов. Если это произойдет, перейдите к следующему шагу. Если нет, сделайте все возможное, чтобы получить этот URL, чтобы вернуть строку CR перед продолжением, или вам нужно будет повторить весь этот процесс. - Вернитесь к Certbot и нажмите Enter для продолжения.
Если все пойдет так, как планировалось, certbot сообщит вам, что все работает, и отображает местоположение созданных сертификатов. Вы будете использовать это местоположение на следующем шаге. Обратите внимание, что вы не сможете проверить содержимое папки из-за os-разрешений. Если есть сомнения,sudo ls /etc/letsencrypt/live/www.example.com
, чтобы увидеть, существуют ли файлы.
Обновите экземпляр Heroku, чтобы использовать новые сертификаты:
Запустите heroku certs:add
, если на вашем сайте нет сертификата. Если обновление, запустите heroku certs:update
. sudo heroku certs:update --app your-heroku-app-name /etc/letsencrypt/live/www.example.com/fullchain.pem /etc/letsencrypt/live/www.example.com/privkey.pem