web-dev-qa-db-ja.com

LetsEncryptSSL証明書をHerokuにインストールする方法

Herokuは読み取り専用であり、Sudoを許可しないため、アプリのサーバーにLetsEncrypt.org証明書をインストールできるようにするにはどうすればよいですか?

すでにconfig.force_ssl = trueを設定している場合、それは重要ですか?

14
blnc

ここで最初の回答のブログ投稿を読みましたが、コードベースを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

6
groovecoder

参考までに、Herokuは、有料のdynoを実行している場合、Let'sEncryptを使用した自動証明書管理を提供するようになりました。次の方法で有効にできます。

heroku certs:auto:enable

より詳しい情報:

https://devcenter.heroku.com/articles/automated-certificate-management

4
Eric

編集:この回答は適用されなくなりました。

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

1
stone

最善の方法は、新しいsslドメイン(httpsで始まる)をドメインに割り当てることです。これにより、http以外のドメインが自動的に上書きされます。

0
Apoorv

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
0
Tom König

HerokuCLIを使用してLet'sEncrypt証明書の認証とインストールを自動化するcertbotプラグインを作成しました: https://github.com/gboudreau/certbot-herok

Php-nginx Herokuビルドパックを使用した例しかありませんが、その例を読んで他のビルドパックに相当するものを見つけるのは簡単なはずです。プルリクエストは他の人を助けるために大歓迎です!

0