Herokuは読み取り専用であり、Sudoを許可しないため、アプリのサーバーにLetsEncrypt.org証明書をインストールできるようにするにはどうすればよいですか?
すでにconfig.force_ssl = true
を設定している場合、それは重要ですか?
ここで最初の回答のブログ投稿を読みましたが、コードベースをACMEのURLとロジックで汚染したくありませんでした。だから私は似たようなことをしましたが、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にアップロードできるようにします。
プロセスを自動化するために使用できる2つの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
参考までに、Herokuは、有料のdynoを実行している場合、Let'sEncryptを使用した自動証明書管理を提供するようになりました。次の方法で有効にできます。
heroku certs:auto:enable
より詳しい情報:
https://devcenter.heroku.com/articles/automated-certificate-management
HerokuがLetsEncryptのネイティブサポートを実装する前に作成されました。残りは後世のために残しますが、これはもはや必要ありません。 @ Ericの回答 を使用してください。
Certbotを手動モードで使用してチャレンジレスポンスを生成し、サイトを変更してそのレスポンスを返し、最後にcertbotの手動プロセスを完了することができます。
Daniel Morrisonによるこのブログ投稿を参照 、または以下の証明書の更新の下にあるリンクされた回答で詳細を確認してください。
@Flimmが言及しているように、またリンクされたブログ投稿で言及されているように、HerokuがLetsEncryptのサポートを改善するまで、これを3か月ごとに更新する必要があります。この回答で説明されているように、環境変数を使用して、そのプロセスをよりスムーズにすることができます(アップロードするコードの変更はありません)(Node/Expressですが、概念は同じです): https://stackoverflow.com/a/40199581/ 37168
Heroku環境変数を設定することで、これらすべてを自動化できるGitHubプロジェクトがあります。これは、プライマリアプリを構成する別のHerokuアプリとしてインストールする小さなWebアプリです。まだ試していませんが、次回は証明書を更新する代わりに使用する予定です: https://github.com/dmathieu/sabayon
最善の方法は、新しいsslドメイン(httpsで始まる)をドメインに割り当てることです。これにより、http以外のドメインが自動的に上書きされます。
Herokuの デフォルトの推奨 は、無料のServer Name Indication(SNI)を使用したSSLです。証明書とキーはすでに取得しているので、次の方法で追加できます。
heroku certs:add <cert>.pem <key>.key
SNIをサポートしないレガシーブラウザクライアントをサポートする必要がある場合は、 Herkou SSL Endpoint アドオンを使用します。これは月額$ 20です。
実行してそのアドオンを追加します
heroku addons:create ssl:endpoint
次に、LetsEncrypt.org証明書を追加します。
heroku certs:add <cert>.pem <key>.key
HerokuCLIを使用してLet'sEncrypt証明書の認証とインストールを自動化するcertbotプラグインを作成しました: https://github.com/gboudreau/certbot-herok
Php-nginx Herokuビルドパックを使用した例しかありませんが、その例を読んで他のビルドパックに相当するものを見つけるのは簡単なはずです。プルリクエストは他の人を助けるために大歓迎です!