Encryptを使ってSSLを導入する方法を紹介します。certbotを使って自動更新をする方法も合わせて紹介します。Groupが運営しているサービスです。Encryptを使用することで、無料でSSL証明書を取得できます。encryptの更新スクリプトの作成Dockerfileにopenssl,certbotの記述を追加まずは、opensslとcertbotをDockerfileに記述します。443記述ができたら、今度は下記の記述を追加します。「sites/」以下にある、今回SSLを反映するファイルに下記の部分を追加します。#使用するアプリケーションのルートを指定します。{#使用するアプリケーションのルートを指定します。記述ができたら、この構成でDokcerを停止しましょう。stop停止したら、buildコマンドでbuildを掛けます。buildbuildを掛けたら、またDokcerを起動しましょう。-dこれでopensslとcertbotを使用できるようになりました。certbotで証明書の発行opensslとcertbotを使用できるようになったら、nginxのワークスペースに下記のコマンドで入り、SSLで使用する証明書を発行します。bashNiginxのコンテナに入ったら、下記のコマンドを使ってSSL証明書を発行します。使用しているコマンドのオプションについて紹介します。certonlyについてSSL/TLS証明書の取得のみを行いますという意味です。利用規約に同意するという意味です。–webrootについてこのオプションを追加することで、稼働中のサービスを落とさずにSSL証明書の発行や更新ができるようになります。-wについてここには、紐付けるルートを指定します。ドメインが紐付いている場所を指定しましょう。-dについて発行したSSL/TLS証明書を使用するドメインを指定します。下記のようにエラーが表示された場合は指定したドメイン名が有効でない可能性があります。指定したドメインが有効かどうかを確認するようにしましょう。Punycodeうまくコマンドが動作すると下記のように質問が飛んできます。cancel):ここは「2」を選択します。tocancel):ここには、緊急連絡先として送信したいメールアドレスを入力します。Encryptに対してのニュースレターを受け取りますか?というメッセージが表示されます。Yes、Noで好きなように答えましょう。エラーが出たらもし、コマンドを入力する中で下記のようなエラーが出た場合は、下記のコマンドで指定したドメインとドキュメントルートにアクセスできるかどうかを確認しましょう。証明書の発行ができたら、Nginxでhttpsで表示するために必要な設定を行っていきます。sites/以下にある、今回SSL化を設定した「.conf」ファイルの中に下記のように記述が加えられている箇所があると思います。/etc/nginx/ssl/default.key;上記を下記のように変更します。example.com;#省略#serverの閉じタグ}ちなみに他にも、ここで使えるSSLのmoduleは下記の公式サイトに記載されています。ngx_http_ssl_moduleリスト記述を変更できたら、この構成でDokcerを停止しましょう。stop停止したら、buildコマンドでbuildを掛けます。buildbuildを掛けたら、またDokcerを起動しましょう。-dこれで「http」にアクセスしたら、「https」にリダイレクトされるようになります。encryptの更新スクリプトの作成let’sencryptの証明書は90日で期限があり、それを過ぎるとhttpsでアクセスできなくなります。そのため最後にlet’sencryptを自動で更新するスクリプトを、cronジョブに仕込んでおきます。これで、let’secnryptの期限が切れても、自動で更新されるようになります。encryptを自動更新するには、DokcerのNginxコンテナ内で下記のコマンドを入力します。renewこのコマンドを定期的に実行されるようにcrontabでcrongジョブとして登録します。cronは下記の2つのステップで実行しましょう。(作業時のユーザーレベルはrootで行います。)1.DockerのNginxに証明書更新のshファイルを作成2.AWSで作成したshファイルを実行するように記述DockerのNginxに証明書更新のshファイルを作成まずは、下記のコマンドでDockerのnginxのコンテナに入ります。bash入ったら、「/var/cronjob/」のディレクトリを作成しましょう。ディレクトリの作成ができたら、今度はコンテナ内部のPATHを下記のコマンドで確認しておきます。#下記のようなものが表示されると思います。$PATH#下記のようなものが表示されると思います。/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin表示されたパスは後で使うので、コピーします。パスの確認ができたら、「/var/cronjob/certbot.sh」という名前でファイルを作ります。ファイルの中身は次の内容で記述します。#PATHで確認したもの。renew12345#PATHで確認したもの。renewPATH=というようにしておかないとエラーが出てしまうため、PATHを記述するようにします。「/var/cronjob/certbot.sh」にファイルが作れたら、今度はEC2側でcronジョブの登録を行います。下記のコマンドでcronが動いているかチェックします。実行中...」のように表示されると思います。動いていなかったら、下記のコマンドで起動しましょう。start今度はcronのプロセスをチェックします。チェックするには、下記のコマンドを入力します。crond下記のように2~5が「on」になっていたらOKっぽいです。6:offそれぞれチェックができたら、cronジョブを登録しましょう。cronジョブを登録するには、下記のコマンドを入力します。-e入力ができたら、下記のように入力します。#cronで実行する処理の詳細を記述。2>&112#cronで実行する処理の詳細を記述。2>&1上記のコードでは、次のような手順で処理を行っています。execでNginxのコンテナに入る。bash2.コンテナ内部の「certbot.sh」を実行。していなし」にジョブを実行という意味になります。ちなみに、テストをする場合は、下記のように設定すると良いかと思います。#この記事を書いている時が、10月6日の18:56分なので。2>&112#この記事を書いている時が、10月6日の18:56分なので。2>&1設定したcronを削除するには、もう一度下記のコマンドを実行していらないcronジョブを削除するにようにしましょう。-eうまく動作していると証明書を作りたての場合、下記のような内容が「certbot_job.log」内に出力されいていると思います。-まとめ最後までお読み頂き、ありがとうございます。Encryptを使ってSSLを導入する方法を紹介しました。この記事があなたの役に立てば幸いです。cronが動かないといった場合はサーバー内部の時間なども確認してみてください。#サーバー内部の時間を確認。date12#サーバー内部の時間を確認。dateもしかすると、cronで設定している時間とサーバー内部の時間にズレがあるため、動作しないといったこともありえます。(時計をみたら14:00だけど、サーバー内部は04:00とか。健太郎1991年生まれ。関西を中心にフリーのプログラマーをしています。日々の技術に関する情報などを発信していきます。健太郎2019年9月23日この投稿へのコメントコメントはありません。コメントをキャンセルメールアドレスが公開されることはありません。コメントデータの処理方法の詳細はこちらをご覧ください。この投稿へのトラックバックトラックバックはありません。