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

nginxまとめ

10~11月はデータベースをちょっと勉強しておりましたが、12,1ぐらいはサーバーインフラ系の強化月間としようかと思います。 しばらくはnginxについてです。 Contents1 nginxの概要2 …

no image

基本的なSSHの設定

一般的なサーバーのSSH対策に関して。素のままでいるとあっという間に不正アクセスの餌食になります。 ちなみにサーバーとしてSSHの設定をいじる場合は[crayon-6100b8bff229134483 …

no image

FastCGIに関して

nginxについて学習してきましたが、今回はphp-fpmについてです。 Contents1 そもそもの構成2 CGIのメカニズム3 FastCGI4 nginxでの設定に関して4.1 fastcgi …

no image

docker上でミニサービスを起動させるまで

dockerで何とかホストOS上でサービスを起動させるところまでは終了。 Contents1 やったこと2 苦戦したこと やったこと CentOSのイメージを取得 [crayon-6100b8bff3 …

no image

nginxでの設定について

何回かやったnginxの設定について。 特にサブディレクトリなどに設定したいなどの時に悩みますね・・・ Contents1 locationディレクティブ2 try_filesディレクティブ3 fas …