Puisque Heroku est en lecture seule et n'autorise pas Sudo, que dois-je faire pour pouvoir installer le certificat LetsEncrypt.org sur leur serveur pour mon application?
Si j'ai déjà défini config.force_ssl = true
, est-ce important?
J'ai lu le billet de blog dans la première réponse ici, mais je ne voulais pas polluer ma base de code avec les URL et la logique d'ACME. J'ai donc fait quelque chose de similaire, mais j'ai utilisé la validation de domaine DNS ...
Avec certbot, spécifiez DNS comme défi préféré:
Sudo certbot certonly --manual --preferred-challenges dns
Après quelques invites, certbot vous indiquera de fournir un enregistrement DNS TXT pour valider votre domaine:
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
Votre registraire de domaine a probablement ses propres documents pour déployer un enregistrement TXT. Faites-le et revenez à certbot et appuyez sur ENTREE - Encrypt vérifie l'enregistrement TXT, signe le certificat et certbot l'enregistre pour que vous puissiez le télécharger sur heroku.
Voir mon propre blog pour plus de détails .
Voici deux fonctions bash que vous pouvez utiliser pour automatiser le processus pour vous
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
}
Ils prennent un argument pour le nom de domaine et tant que vous les exécutez depuis votre
heroku app folder
, vous n'aurez pas à spécifier un--app NAME
Exemple:
makessl www.domain.com
Exemple:
renewssl www.domain.com
Combinez ceci est la réponse de @Eric et vous êtes prêt à partir:
heroku certs:auto:enable
Pour votre information, Heroku propose désormais une gestion automatisée des certificats avec encryptage si vous exécutez un dyno payant. Vous pouvez l'activer avec:
heroku certs:auto:enable
Plus d'informations:
https://devcenter.heroku.com/articles/automated-certificate-management
Il a été écrit avant que Heroku ne mette en place un support natif pour LetsEncrypt. Laisser le reste pour la postérité, mais ce n'est plus nécessaire. Utilisez @ La réponse d'Eric maintenant.
Vous pouvez utiliser certbot en mode manuel pour générer la réponse au défi, modifier votre site pour renvoyer cette réponse, puis terminer le processus manuel de certbot.
Voir cet article de Daniel Morrison sur le blog , ou la réponse liée sous Mises à jour des certificats ci-dessous, pour plus de détails.
Comme @Flimm l'a mentionné, et comme mentionné dans l'article de blog lié, vous devrez le mettre à jour tous les 3 mois jusqu'à ce que Heroku fournisse un meilleur support pour LetsEncrypt. Vous pouvez rendre ce processus plus fluide (aucune modification de code à télécharger) à l'aide d'une variable d'environnement telle que décrite dans cette réponse (Node/Express mais les concepts sont les mêmes): https://stackoverflow.com/a/40199581/37168
Il existe un projet GitHub qui peut automatiser tout cela pour vous en définissant vos variables d'environnement Heroku. C'est une petite application Web que vous installez comme une autre application Heroku qui configure à son tour votre application principale. Je ne l'ai pas encore essayé, mais je prévois de l'utiliser au lieu de mettre à jour mon certificat la prochaine fois: https://github.com/dmathieu/sabayon
le meilleur moyen peut être d’affecter le nouveau domaine ssl (qui commence par https) à votre domaine, qui remplace automatiquement le domaine non http
Le recommandation par défaut de Heroku est SSL et utilise l'indication de nom de serveur (SNI), qui est gratuite. Puisque vous avez déjà obtenu votre certificat et votre clé, vous pouvez les ajouter de la manière suivante:
heroku certs:add <cert>.pem <key>.key
Si vous devez prendre en charge les clients de navigateur hérités qui ne prennent pas en charge SNI, utilisez l’addon Herkou SSL Endpoint qui coûte 20 $/mois:
Ajouter cet addon en exécutant
heroku addons:create ssl:endpoint
Et ajoutez ensuite vos certificats LetsEncrypt.org:
heroku certs:add <cert>.pem <key>.key
J'ai créé un plugin certbot qui utilise la CLI Heroku pour automatiser l'authentification et l'installation des certificats Let's Encrypt: https://github.com/gboudreau/certbot-heroku
Je n'ai qu'un exemple qui utilise le buildpack php-nginx Heroku, mais la lecture de cet exemple et la recherche de l'équivalent pour d'autres buildpacks devraient être assez faciles. Les demandes de tir sont les bienvenues pour aider les autres!