LetsEncryptの無料のSSL証明書で暗号化したいNode ExpressアプリをHerokuで実行しています。ただし、これまでに見た方法では、ポート443と80を開く必要があります。 ACMEプロセスを機能させるため。
Herokuは1つのポートしか提供せず、どのポートを選択することはできません。では、LetsEncryptをどのように使用できますか?
私は昨日これを理解するのにたくさんの時間を費やしました。久しぶりに、私がやろうとしていたことに対するStackOverflowの回答がありませんでした!
HerokuはLetsEncryptをネイティブにサポートするようになりました!したがって、この回避策は不要になりました。
ここでの手順:
https://devcenter.heroku.com/articles/automated-certificate-management
新しいアプリの場合、何もする必要はありません。デフォルトでオンになっています。 2017年3月21日より前に作成されたアプリの場合、次のHerokucliコマンドでオンにできます:heroku certs:auto:enable
ありがとう@SpainTrain
理想的には、LetsEncryptは自動化された証明書更新プロセスを可能にします。これはHerokuで行うのが難しいため、この回答では手動プロセスの使用方法について説明します。 Heroku環境変数を使用すると、コードを変更することなく、かなり簡単に手動で証明書を更新できます。
この回答の功績は、主に2つの素敵なブログ投稿にあります: 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
Herokuでの自動証明書更新をサポートしていると思われるGitHubプロジェクトがあります。試してみたら、この回答を更新します。
https://github.com/dmathieu/sabayon
このミドルウェアをExpressアプリに追加します。このエンドポイントはhttpである必要があるため、httpをhttpsにリダイレクトするミドルウェアの前に必ず追加してください。
// Read the Certbot response from an environment variable; we'll set this later:
const letsEncryptReponse = process.env.CERTBOT_RESPONSE;
// Return the Let's Encrypt certbot response:
app.get('/.well-known/acme-challenge/:content', function(req, res) {
res.send(letsEncryptReponse);
});
Sudo certbot certonly --manual
Sudo ls /etc/letsencrypt/live/www.example.com
でファイルが存在するかどうかを確認してください。サイトに証明書がない場合は、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
ドメインの所有権を検証して、HTTPの代わりに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'sEncryptはTXT記録し、証明書に署名すると、certbot
によって保存されてherokuにアップロードできます。
詳細については私の詳細なブログ投稿 を参照してください。