GoogleがSEOの優遇措置としてサイトSSL化を公表してから大分経ちますが、HTTPSで運用されているサイトやブログはそんなに増えていない印象です。
サイトをHTTPSで運用するにはSSLサーバ証明書が必要ですが、これには費用が発生します。しかも結構高い。個人でブログを運営している人などには費用が発生する時点で躊躇われる点ではないでしょうか。
この記事で紹介するLet's Encrypt
は一部制限がありますが無料で使用することができます。
ちなみに以下が記事作成時(2016/09/17)のSSLサーバ証明書(1年)を取り扱っている会社の価格比較です。
ドメイン認証 | 企業認証 | EV認証 | |
---|---|---|---|
Symantec(旧ベリトランス) | 取扱なし | 81,000 円 | 162,000 円 |
Cybertrust | 取扱なし | 75,000 円 | 150,000 円 |
GeoTrust | 31,300 円 | 55,000 円 | 115,200 円 |
GlobalSign | 34,800 円 | 59,800 円 | 128,000 円 |
ラピッドSSL(GeoTrust) | 4,300 円 | 取扱なし | 取扱なし |
個人であれば、企業認証やEV認証は必要ありませんが、ドメイン認証だとしてもどこも高いです・・・。唯一、GeoTrust社のラピッドSSLであれば個人でも購入できるかなという金額で、サーバのホスティング業者によっては値引きもしています。
そこで、今回紹介するLet's Encrypt
です。Let’s Encryptを運営しているISROは「ISROの使命は、インターネット通信の安全を確保するため、経済、技術、教育に関する障壁を低くすることです。」という理念のもと活動しています。
ISRG’s mission is to reduce financial, technological, and education barriers to secure communication over the Internet.
Let’s Encrypt Internet Security Research Group (ISRG)
Let’s Encryptは無料で使用することができますが、SSLサーバ証明書の取得および証明書には以下の制限があります。
- ドメインを取得していること
- サイトが公開されていること
- サーバのroot権限が必要なこと
- 現時点ではLinux/BSD系のサーバのみサポートしていること
- ドメイン認証型のみの提供であること
- 1週間で発行できる証明書はサブドメインを含め20個までであること
他にもいくつかありますので、英語のページですが詳細はRate Limitsを参照ください。
Let’s Encryptの準備
Let’s Encryptには様々なサードパーティ製のインストーラがありますが、公式標準の方法で行います。
また、以下の方法はOS
を選ばず、Apache HTTPD
やNginx
をソースからインストールした場合でも有効です。
epel-release
とcertbot
をyum
でインストールします。
1 2 |
$ yum -y install epel-release $ yum -y install certbot |
Let’s Encryptで証明書を生成
Let’s Encryptを使用して証明書を作っていきます。
以下のコマンド実行すると、証明書を作成するための画面が表示されます。
1 |
$ sudo certbot certonly |
証明書をウェブで使用するか、スタンドアローンで使用するかを確認されるので、1
のwebroot
を指定してOKを押します。
上下キーで1、2を選択でき、左右キーでOK、Cancel、More Infoを選択できます。OK等を選択する場合はエンターキーを押します。
次の画面で、使用するドメイン名をカンマまたはスペース区切りで入力し、OKを押します。
新規で証明書を作成するので、1のEnter a new webrootのままで、OKを押します。
ディレクトリが表示されますので、ドキュメントルートを入力します。
これが完了すると、/etc/letsencrypt/live/{ドメイン名}/
ディレクトリに秘密鍵と公開鍵が作成されます。
1 2 3 4 5 |
$ ls -l /etc/letsencrypt/live/{ドメイン名}/ lrwxrwxrwx 1 root root 41 Sep 12 01:04 cert.pem -> ../../archive/{ドメイン名}/cert1.pem lrwxrwxrwx 1 root root 42 Sep 12 01:04 chain.pem -> ../../archive/{ドメイン名}/chain1.pem lrwxrwxrwx 1 root root 46 Sep 12 01:04 fullchain.pem -> ../../archive/{ドメイン名}/fullchain1.pem lrwxrwxrwx 1 root root 44 Sep 12 01:04 privkey.pem -> ../../archive/{ドメイン名}/privkey1.pem |
Let’s Encryptで生成した証明書の適応
- Apache HTTPD の場合
chain.pem
とprivkey.pem
を使用します。
fullchain.pem
とprivkey.pem
を使用します。
どうもchain.pem
だと、Androidで「プライバシーが保護されません」というエラーが発生するようなので、fullchain.pem
を使用します。- Nginx の場合
fullchain.pem
とprivkey.pem
を使用します。
Let’s Encryptで生成した証明書の更新
以下のコマンドを実行すると、証明書を一括で更新することができます。
1 |
$ certbot renew |
初回の登録が完了したら、このコマンドをcrontab
や/etc/crontab
に登録すれば自動的に証明書が更新されます。
1 2 3 4 5 |
$ vi /etc/crontab # 毎月1日の午前1:00に証明書の更新を試みる 0 1 1 * * root /usr/bin/certbot renew >> /var/log/letsencrypt/update.log 2>&1 # 毎月1日の午前2:00にApache HTTPD等の設定再読込を試みる 0 2 1 * * root /usr/bin/systemctl reload httpd > /dev/null |
まとめ
以上でLet’s Encryptを使用してSSLサーバ証明書を作成し、サイトをHTTPSで公開することができます。
個人でブロクを公開している人や、私と同じような技術屋、フリーランスの方で費用のない顧客に対して提案できればいいかなと思います:)