[サーバー] Let's EncryptとNginxで、https対応を行う
こんにちは、@yoheiMuneです。
今日は、無料でSSL対応ができるLet's Encryptを使って、Nginxのhttps対応を書きたいと思います。
非営利団体が運営していて、「Webにおける暗号化(HTTPS)の使用率を100%にする」ことを使命に活動しているようです。カッコイイ。有名企業や団体がスポンサーにいて、かなり頼もしいです。
また、SSL化対象のWebサーバーが起動していて、ドメインも指定されている必要があります。この記事ではドメインが
Let's Encrypt Documentation(公式、英語)
Let's Encrypt 総合ポータル(非公式、日本語)
[サーバー] Let's Encryptで複数ドメインに対応した証明書を作成する
最後になりますが本ブログでは、インフラ、Linux、Node.js、Python、Swift、Go言語、フロントエンド、Java、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時に、解決の糸口を見つけられる」そんな目標でブログを書き続けています。今後も役立つネタを書いていきますので、ぜひ本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
今日は、無料でSSL対応ができるLet's Encryptを使って、Nginxのhttps対応を書きたいと思います。
目次
Let's Encryptとは
Let's Encryptは、無料でSSL証明書を発行できるサービスです。さらに証明書の自動更新もできます。SSL証明書は安いものでも1年に数千円かかりますが、無料でできるなんて素敵ですね。非営利団体が運営していて、「Webにおける暗号化(HTTPS)の使用率を100%にする」ことを使命に活動しているようです。カッコイイ。有名企業や団体がスポンサーにいて、かなり頼もしいです。
Let's Encryptを使ってhttps対応を行う
ここでは、EC2とNginxの環境(構築方法はこちらのブログ参考)を例に、導入手順を書きたいと思います。UbuntuやCentOS7なども流れは同じなので、非公式解説サイトも参考にしながら流れを追っていただけたら幸いです。事前に
以降の作業は、ルートユーザーで行います。$ sudo su -
また、SSL化対象のWebサーバーが起動していて、ドメインも指定されている必要があります。この記事ではドメインが
my.example.com
であると仮定して、話を進めます。# 80ポートで表示されるか # ブラウザで以下のURL http://my.example.comSSL設定中に、Let's Encryptのサーバーから
80
番ポートでアクセスされるので、80ポートは公開しておく必要があります。Let's Encryptを導入する
Let's Encryptを利用するために、cerbot
というツールを導入します。以下のコマンドでインストールします。# cerbotのインストール $ curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot $ chmod 700 /usr/bin/certbotインストール後に、以下のコマンドが認識されればOKです。
$ cerbot-auto
SSL証明書を発行する
cerbot-auto
コマンドを使って、証明書の発行を行います。以下のコマンドを実行します。# 証明書の発行 certbot certonly --webroot -w /usr/share/nginx/html -d my.example.com --debug # オプションの説明 # --webroot : Webサーバーを用いてSSL発行の手続きを行う # -w : ドキュメントルートを指定 # -d : SSL化対象のドメインを指定 # --debug : (Amazon Linuxの場合のみ)まだ実験的な位置付けだが使いたい場合に付与上記コマンドを実行すると、メールアドレスの入力を求められるので、入力します。
# メールアドレスが求められる Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):次に、同意を求められるので、規約を読んで「(A)gree」を選択します。
## 同意が求められる ------------------------------------------------------------------------------- Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v01.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (A)gree/(C)ancel:次に、登録したメールアドレスにて更新情報を受け取るかを問われます。必要なければ「(N)o」を選択します。
------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o:しばらく待つとSSLの発行が終わり、証明書の保存先が表示されて正常終了します。
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/my.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/my.example.com/privkey.pem Your cert will expire on 2018-02-26. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le実際に上記で示されたディレクトリを確認すると、証明書があることを確認できます。
# 証明書の確認 $ ls /etc/letsencrypt/live/my.example.com/ cert.pem chain.pem fullchain.pem privkey.pem READMEこれで証明書の導入は完了です。
Nginxでhttpsを有効化する
nginx.conf
などの設定ファイルを編集して、SSLを有効化します。# /etc/nginx/nginx.conf など server { ... # SSLを利用. listen 443 ssl; # SSL証明書のパスを指定. ssl_certificate /etc/letsencrypt/live/my.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/my.example.com/privkey.pem; ... }設定を読み込んで有効化します。
service nginx reloadブラウザからhttpsでアクセスできればOKです。
# SSLでアクセス. https://my.example.com
証明書の自動更新
Let's Encryptの証明書の有効期限は3ヶ月です(執筆時2017/12の場合)。cerbot
とcronを用いることで、自動的に更新することができます。# crontab -e ## 証明書の自動更新(毎月10日の3時) 0 3 10 * * /usr/bin/certbot renew && /sbin/service nginx reload
参考ドキュメント
以下のサイトを参照しました、ありがとうございます。基本的には日本語サイトが分かりやすいですが、時々古い場合があるので適宜公式サイトも見ながら情報を得ると良さそうです。Let's Encrypt Documentation(公式、英語)
Let's Encrypt 総合ポータル(非公式、日本語)
関連記事
Let's Encryptについては下記の記事も書きました。参考になれば幸いです。[サーバー] Let's Encryptで複数ドメインに対応した証明書を作成する
最後に
2018年1月からはワイルドカード証明書も発行できるようになるようです。楽しみですね。最後になりますが本ブログでは、インフラ、Linux、Node.js、Python、Swift、Go言語、フロントエンド、Java、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時に、解決の糸口を見つけられる」そんな目標でブログを書き続けています。今後も役立つネタを書いていきますので、ぜひ本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!