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

一般的なサーバー監視コマンド

一般的な監視コマンドをメモします。 Contents1 ネットワーク状況1.1 ping1.2 traceroute ネットワーク状況 ping ネットワークの通信が正常かどうかをみる最も一般的なコマ …

no image

ansible template,tag,yeditなど

Contents1 template2 tags3 yedit template 今まで設定ファイルを使うときは基本ini_fileを使って置換したり、ローカルでファイルを作ってcopyしておりました …

no image

apacheでのバーチャルホストの設定

このブログを旧サイトから移管し、同一ホストで別々のドメインを運用することになったので、バーチャルホストの設定を行いました。 Contents1 設定方法1.1 http.conf1.2 実際のバーチャ …

no image

SSH鍵認証について+CakePHP2でのセッション切れ

鍵認証の設定をしたのでその際のメモなどを。 Contents1 SSH鍵認証2 CakePHP2セッション切れ SSH鍵認証 サーバーで公開鍵・秘密鍵を作成 サーバーで公開鍵を登録 クライアント側で秘 …

no image

MacでのVirtualHost設定

MacでのVirtualHostについて。 Contents1 設定方法2 注意点2.1 httpd -S2.2 httpd: Could not reliably determine the ser …

アーカイブ