techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

Let's Encryptを使ってSSL通信してみた(Cent OS 6 + Apache2)

Let's Encryptが正式サービスを開始したということで、試しに使ってみました。
Let's EncryptはSSL/TLSによるHTTPS通信を行うためのサーバ証明書を誰でも簡単に取得、インストールできるサービスです。また、サーバ証明書の取得とインストールを自動化できることも大きな特徴です。

今回はサクラVPSでレンタルしたCent OSに、Certbotクライアントを用いてLet's Encryptを導入してみました。

【環境】
Cent OS 6.8
Apache 2.2.15

Let's Encryptって?

通常、SSL/TLSによるサーバ認証を行うためには、シマンテックなどの認証局からサーバー証明書を発行してもらい、自サーバーにインストールする必要がありますが、ただでは発行はしてもらえませんし、手続き等も必要になります。
あるいは自分で認証局を立ててサーバ証明書を作成することもできますが、この場合、クライアントとなるのブラウザにはルート証明書がインストールされていないため、個別にルート証明書をインストールしなければHTTPSによる通信を行うことができません。

Let's Encryptはそのあたりの問題を解決しており、無料で簡単にサーバ証明書を取得することができます。さらに、以下の通りほとんど主要なブラウザがLet's Encryptに対応しています。
・Microsoft Internet Explorer 6 以上
・Microsoft Edge
・Google Chrome
・Mozilla Firefox 2.0 以上
・Apple Safari 4.0 以上
・Android ブラウザ (Android 2.3.6 以上)
※細かい環境についてはこちらを確認してください。→参考:Let's Encrypt 総合ポータル

サーバ証明書導入時の注意点

Let's Encryptでサーバ証明書を導入した際、いくつか気をつけておきたい点がありました。

  • Python 2.6以上 もともとサクラVPSでCent OSを構築していましたが、バージョンが5.11でした。。Cent OS 5.11ではPythonのバージョンが通常2.4なので、導入が大変なようです。ということで、今回はCent OS 6.8のサクラVPS環境を別途構築しました。

  • ドメインが必要 Cent OS 6.8を契約したはいいもの、残念ながらIPアドレスではLet's Encryptによるサーバ証明書の発行はできません。ドメインを取得し、ブラウザからアクセスできるようにしておきましょう。

  • CertbotクライアントがNginxにはまだ正式に対応していない? SSLの設定は、使用するHTTPサーバによって異なります。そのためCertbotクライアントでは、環境別にプラグインを用いてサーバ証明書の取得とインストールを行うようなのですが、 Nginx用のプラグインが正式にリリースされていないようです(参考:ユーザーガイド - Let's Encrypt 総合ポータル)。
    導入に苦労しそうだったので、、、今回はApacheで試してみました。

*発行できるサーバ証明書の数に限りがある ドメイン当たりの発行数に限りがあるようです。Let's Encryptを試してみたい場合は、テスト用証明書を発行するのが良いでしょう。
※ただし、テスト用のサーバ証明書だと、ブラウザからアクセス時に警告が表示されます。

他にもあるかもしれません。

実際にサーバ証明書を取得してみる

それでは実際にサーバ証明書を取得してみます。
まずはサーバ証明書の取得とインストールを自動で行ってくれるCertbotクライアントをGithubから取得します。
※ここからはサーバ上での作業です。

# git clone https://github.com/certbot/certbot

取得できたら、以下のコマンドを実行します。

# cd certbot
# ./certbot-auto run --test-cert

テスト用の証明書を取得するために--test-certオプションを付与しています。
実行すると、証明書の取得とインストールを行うための画面が立ち上がります。
順番に進んでいきます。
f:id:uentseit:20160701215158p:plain
↑ここでIPアドレスを入力するとエラーになります。ドメイン名が必要です。
f:id:uentseit:20160701215202p:plain
↑メールアドレスを入力します。
f:id:uentseit:20160701215205p:plain
f:id:uentseit:20160701215208p:plain
f:id:uentseit:20160701215211p:plain
↑HTTPによるアクセスを許容するか否かを選択します。今回は許容するようにしましたが、本番環境構築時はHTTPSのみがいいでしょう。
f:id:uentseit:20160701215214p:plain
↑Congratulations!ということで成功です!

たったこれだけで、自動でssl.conf(Apache使用時のSSlの設定ファイル)の設定まで行われ、指定したドメインでHTTPS通信が行えるようになりました。
ナンテコッタ!

参考:letsencrypt.org 参考:https://letsencrypt.jp/