skillup

技術ブログ

サーバー・ネットワーク

herokuでのLet’s Encrypt設定

投稿日:2020年4月29日 更新日:

herokuで運用しているアプリでhttps設定(Let’s Encrypt)をしたいという要望があり、調査、設定をすることに。

当然herokuでなくても大丈夫です。

過去に行ったhttps設定に関して

SSLに関して(主にオレオレSSLの作成方法など)

SSLの設定に関して

Let’s Encryptとは

通常SSLの証明証発行ではお金がかかることが多いのですが、Let’s Encryptでは無料で設置ができるようです。

無料SSL証明書のLet’s Encryptとは?

ローカルのmacで鍵、証明書を作成でき、これをサーバーに配置すればOKかと思います。

デメリットとしては更新頻度がやや短い(3ヶ月ごと?)ということでしょうか。プログラムで自動化してしまえば大丈夫っぽいですが。

作成方法

もうほとんどここのリンクに書かれていることを実行すれば大丈夫かと思いました。

MacOS に CertBot を入れて Let’s Encrypt 証明書を作ってみる

わかりやすすぎ・・

手順1 CertBotのインストール

証明書を作成するために、CertBotというソフトをインストールする必要があります。

下記コマンドでそのまま入れられます。

手順2 証明書発行

ソフトがインストールできたら実際に証明書を作成します。

sudo certbot certonly --manual --domain  example.herokuapp.com

ここでインストールとウィザードが始まります。詳細は先ほどのリンクをみた方がいいでしょう(汗)

最後に下記のようなメッセージが出て実際に鍵が作られますが、ここでEnterを押してはダメです。

これは要するに http://example.herokuapp.com/.well-known/acme-challenge/foofoofoo というurlにアクセスをした時にhogehogehogehogeというレスポンスを返してね、という指示ですので、アプリ側の設定が必要になります。

(注:実はherokuの場合このurl自体にアクセスをさせるのが大変でした・・・
参考リンク herokuでのhttpd.conf設定 )

まだ準備もしていないうちにEnterを押しても当然期待通りのレスポンスはかえってきませんので、エラーになります。

ルーティングでも実際にファイルをおくでもいいのですが、上記URLでアクセスした時に上記の文字列を返すような処理を入れましょう。

うまく行けば上記のように自分のPCに鍵が生成されています。

手順3 鍵配置

実際に上記のディレクトリ /etc/letsencrypt/live/ に行くとサーバ証明証と中間CA証明書の結合( /etc/letsencrypt/live/example.herokuapp.com/fullchain.pem )と秘密鍵( /etc/letsencrypt/live/example.herokuapp.com/privkey.pem )がありますので(実際にはシンボリックリンクですので本来のパスは /etc/letsencrypt/archive/example.herokuapp.com/ 直下です。)、これらをサーバーに配置して通常の設置(参照:SSLの設定に関して)あげれば大丈夫かと思います。

ちなみにherokuだとサーバーへのアップが直接できないため下記のようにコマンドであげます。

(* fullchain.pem → cert.pem にリネームしてます。)

heroku certs:add cert.pem privkey.pem

Freeプランだとできないので注意しましょう・・

LaravelでHerokuにSSLを設定した話。

Let’s Encryptで取得した証明書をHerokuに反映させてみた

オチ

実は私が触っていた案件はドメインが独自ドメインではなく、 http://example.herokuapp.comのようなherokuディフォルトのドメインだったため、すでにhttps設定はされていました。

四苦八苦して設定を試していたところ未設定のはずなのにhttpsが通ったんで、ブラウザを調べてみましたが、証明証がすでに発行されておりました。

不要だったわけですね・・・。

よく考えりゃ、herokuのドメインなので自体は当然してますよね・・・

ちなみに一般のVPSサーバーなどでは、

作成した鍵をscpでローカルからサーバーに移管し、

そのあと下記のように鍵の位置に配置し、

webサーバー(apacheなど)再起動しましょう。

そのあと、ブラウザでURL欄の「証明書」の有効期限が更新されていればOKです。

-サーバー・ネットワーク
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

cakePHPでのサブディレクトリ(apache)

apache使用時、cakePHP2系をサブディレクトリで使いたいときの運用法に関して。通所通りですとファイルにアクセスできないので、URLのリライトをうまくしないといけません。下記に設定例をかきます …

no image

ファイルアップロード・ダウンロードに関するシェルスクリプト

ファイルのアップロードやダウンロードに関するシェルスクリプトなんぞを。 地味ですが、以外に登場頻度は高いかと。 Contents1 FTP1.1 ダウンロード1.2 アップロード2 SCP2.1 アッ …

no image

dockerコマンドについて再考(ttyや/bin/bashなど)

Contents1 ttyオプションに関して2 docker execコマンドに関して2.1 ログインしないパターン2.2 shellに関して ttyオプションに関して dockerでnodeを起動さ …

no image

nginx上でのcakePHP

cakePHP上をCentOS,nginx上で公開するときのメモなどを。 cakeのversionは2.5です。 /var/www/html/sampleapp直下にプログラムを配置するものとします。 …

no image

システム監視の基礎

システム監視のルールがほとんどないので、ちょっと勉強中です。 Contents1 危険率の判定2 参考文献 危険率の判定 今まで一番知りたかったことがこれなんですね。例えばシステムに負荷がかかっている …