Denen blog

株式会社電縁の社員によるブログです。

え、タダで出来ちゃうの?無料のSSL証明書、「Let's Encrypt」をやってみた

こんにちは。初見さんいらっしゃい。

電縁で工数管理ツールInnoPMの販売、開発を担当している関口といいます。

あと最近副業で絵師を始めました。素敵な似顔絵をご希望な方はぜひ私まで。

 

f:id:yasuaki-sakai:20170518120858p:plainf:id:yasuaki-sakai:20170518120906p:plain

※こういうのです

 

すみません、番宣はさておき、今日は最近業務にて使用した「Let’s Encrypt」というものについてご紹介したいと思います。

 

目次:

1.Let’s Encryptとは?

2.オレオレ証明書と何が違うの?

3.さぁ、やってみよう!

4.おわりに

 

1.Let’s Encryptとは?

いきなり「Let’s Encrypt」と言われても、「さぁ、暗号化しようぜ!」くらいの情報しかわからないと思いますんで、最初にその説明をしていきます。

 

みなさんはSSLってご存知でしょうか?IT業界で働いている方なら、馴染み深いと思いますが、それ以外の方ですと、何それーって感じだと思いますので、簡単に説明をします。

 

SSLというのは通信規格の1つで、URLから見分ける基準としては

「s」が最後に付いているかというところが判断基準となります。

 

もう一つぱっと見でわかる基準としては、ネットサーフィンをしていて、URLの横にこんな鍵マークを見たことはありませんか?

f:id:yasuaki-sakai:20170518121245p:plain

これ、SSL通信をしているマークとなっていて、この表示になっているサイトへの通信は、暗号化してデータをやり取りしているということになります。

 

住所やパスワードのような、他人に知られたくない情報を入力する際に、この鍵マークが付いていないサイトだと、通信されたデータが暗号化されていないため、第三者(ハッカーやクラッカーなど)へ情報が漏れる可能性があるのです。。。

 

開発者がこのSSLを利用してWebサイトを作るためには、1年単位などでライセンスを取得し、その証明書を用いる必要があります。

 

その値段は暗号の強度や、証明している団体によって異なり、SSL業界で高い信頼を誇る「シマンテック」のSSL証明書は、安いもので1年で108,000円もするのです!企業が使うといえ、高いですね。。。

 

このSSL証明書を無料で発行してくれるサービスが、「Let’s Encrypt」というものなのです。つまり0円でSSLを利用出来ちゃうってことなんですね。

 

なんで無料でやってくれちゃうの?と思いますが、公式ページではこんな回答をしています。

Let's Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLSHTTPSTLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。

非営利団体ISRG (Internet Security Research Group) が運営しており、シスコ(Cisco Systems)、Akamai電子フロンティア財団(Electronic Frontier Foundation)、モジラ財団(Mozilla Foundation)などの大手企業・団体が、ISRG のスポンサーとして Let's Encrypt を支援しています。

 まとめると、SSLを用いた通信を普及させることを目的とし、様々な企業・団体が支援して成り立っているプロジェクトなようです。

 

2.オレオレ証明書と何が違うの?

この章では開発者には馴染みの深い、「オレオレ証明書」との違いについて説明します。

開発者でない方はSkipしていただければと思います!

 

オレオレ証明書は、自己署名証明書とも呼ばれ、その名の通り第三者ではなく自分が安全性を保証してSSL証明書を発行するものになります。

 

本来、SSL通信の仕組みは下の図のような形で行われています。

f:id:yasuaki-sakai:20170518120939p:plain

オレオレ証明書というのは、この③で登場する認証局の役割も自分で担ってしまうという通信です。

 

例えばAさんがBさんに何か暗号を送ったときに、その鍵の中身をBさんが確認したら「この暗号が正しいかどうかは私(Aさん)に聞いてください」と書いてあるとすると、何が正しいのか何も確認できなくなっていまいますよね。

 

そんな感じで、オレオレ証明書正当性が確認できない証明書というものになります。

 

この証明書でもSSL通信を実現することが可能だったのですが、最近のブラウザはセキュリティのレベルが上がっているため、ほとんどのブラウザで「接続の安全性を確認できません」と表示され、接続が出来なくなってしまいます

 

対して「Let's Encrypt」を用いてSSLを証明書を発行すると、証明元が存在し、かつGoogleやMozzila(Firefox)などから認定を受けた正当な証明元なので、ブラウザで安全に接続され、通信を行うことが出来るようになります。

 

これがオレオレ証明書とLet's Encryptの大きな違いと言えるでしょう。

 

3.さぁ、やってみよう!

さて、ここからは実践編です。

まず今回、実行した環境は以下です。

 

作業手順としてはこんな感じ

  1. certbotのインストー
  2. certbot-autoコマンドを叩く
  3. apacheの設定変更
  4. SSL自動更新の設定

 

certbotのインストー

 certbotとはLet’sEncryptが提供する、クライアントソフトウェアで、これを使えばSSL証明書の取得・更新作業を自動化出来るようになっています。

今回はこれを使ってサイトのSSL化をしていくので、まずはcertbotをインストールします。

# curlで叩いてパスの通るところへ
$ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto

# 権限付与
$ sudo chmod 700 /usr/bin/certbot-auto

 

certbot-autoコマンドを叩く

 certbotのインストールが完了したら、今度は証明書を発行するために、certbot-autoコマンドを叩いていきます。

# certbot-autoコマンドの詳細
$ sudo certbot-auto certonly \   # 証明書の作成
    --webroot \                  # 既存のウェブサーバを使うモードを選択
    -w /var/www/hoge\            # ドキュメント・ルートのパス
    -d denen.com      \          # 認証するドメイン名
    --email <メール>@<アドレス>  # メールアドレス登録 (証明書期限切れの通知用)

f:id:yasuaki-sakai:20170518121315j:plain

そうするとこんな感じの画面が出てくるので、「agree」を選択。

その後、証明書の発行が始まります。

 

証明書が発行されると、

/etc/letsencrypt/live に置かれます。

$ sudo ll /etc/letsencrypt/live/

drwxr-xr-x 2 root root 4096  424 15:29 2017 hoge.com    # ドメイン別でdirが出来る
drwxr-xr-x 2 root root 4096  415 20:34 2017 denen.com

中身はこんな感じになっていて、リンクが貼られている形となっています。

$ sudo ll /etc/letsencrypt/live/
lrwxrwxrwx 1 root root  36  326 15:00 2017 cert.pem -> ../../archive/hoge.com/cert1.pem
lrwxrwxrwx 1 root root  37  326 15:00 2017 chain.pem -> ../../archive/hoge.com/chain1.pem
lrwxrwxrwx 1 root root  41  326 15:00 2017 fullchain.pem -> ../../archive/hoge.com/fullchain1.pem
lrwxrwxrwx 1 root root  39  326 15:00 2017 privkey.pem -> ../../archive/hoge.com/privkey1.pem

 

apacheの設定変更

 続いてSSL化するサイトに証明書を読み込ませます。

# 通常の記載については省略します。
$ sudo vim /etc/httpd/conf.d/hoge.conf
SSLCertificateFile /etc/letsencrypt/live/hoge.com/cert.pem    # SSLサーバー証明書ファイルの指定
SSLCertificateKeyFile /etc/letsencrypt/live/hoge.com/privkey.pem    # SSLサーバー証明書とペアになる秘密鍵の指定
SSLCertificateChainFile /etc/letsencrypt/live/hoge.com/fullchain.pem    # 中間証明書ファイルの指定

$ sudo service httpd restart # apacheの再起動

これにてSSLの設定は完了です。

 

SSL自動更新の設定

 Let'sEncryptは無料でとても良いサービスなのですが、証明書の有効期限が90日で切れてしまいます。

ただ、証明書の更新を行えばその期限は持続されるので、最後にその自動化を行っていきます。

自動化は簡単で、開発者であればおなじみのcronコマンドを使えばOKです。

# 毎月1日の午前4時に自動更新をするcron登録
$ sudo crontab -e
00 04 01 * * /usr/local/certbot/certbot-auto renew --force-renew && service httpd restart    # certbot-auto で証明書を更新し、apacheを再起動

このcronを登録すれば、自動更新の設定は完了です。

 

4.おわりに

個人的に、久々にBlogを書きましたがやっぱり大変ですね。。。

もうやりたくないです。(笑)

うそです、次はどんな記事を書こうかなぁ~(棒読み

 

そんな感じで次の方、よろしくお願いしまーす!!!

 

書いた人:なんちゃってエンジニア 関口

f:id:yasuaki-sakai:20170518120952p:plain