Let’s Encryptで無料でSSLを設定する方法

こんにちは、コンサルチームWTE担当の森山です。
今回は皆さまのサイトを守るセキュリティについてのお話しです。

私が担当しているWTEシステムでも、また私のSEO勉強会でもお客様に伝えているのが「SSL」の設定をちゃんと行いましょうということ。
特に2017年に入り、GoogleのChromeブラウザでも、SSLを設定しているサイトと、設定してないサイトの区別を明確に示すようになっており、SSLは世界的にも必須のものとなりつつあります。
ただ、私が感じているのは、それでも思うように日本でSSLが普及していないということです。
IT統制とか、情報システムとか、色々と日本にはシステムを運用する際にあたってのリスクを守るためのルールや部隊があるにも関わらず、このSSLが普及していない現状に私自身、とても違和感や矛盾を感じてしまうのです。
特にメールに関しては、より一層SSL適用が遅れているように感じており、別メールで、添付ファイルのパスワードを送る前に、SSLの設定をする方が先なのになと思っている次第です。

今回は、私自身がお薦めしている簡単なSSL設定方法、Let’s Encryptのお話と、実際にサーバへの設定方法をまとめてみたいと思います。

SSLが普及しない2つの要因

SSLが思うように普及しない原因は2つあると思っています。
1つ目はサーバ証明書を取得、更新のために費用がかかってしまうこと。
今ではRapid SSLのように安価なサーバ証明書も登場したが、1ドメインに年間数千円~数万円の費用がかかってしまうのは事実です。
SSLが無くとも運用出来るホームページにおいて、セキュリティのためのランニングコストは、どうしても優先順位が低くなってしまうのではないかと考えています。

2つ目の要因は、SSLを実装するために、手間がかかってしまうということだと思います。
SSHによるサーバ設定が必要になるため、技術者でないとなかなかセットアップ出来ないということと、色々な認証局との手続きも発生するということ。
また、SSLには期限が存在するため、数か月~数年で更新という作業も発生します。
更新のたびに再度サーバでの設定が必要となってしまうため、意外と一般的にハードルが高い作業であることは事実です。

Let’s Encryptのメリット

Let’s Encryptはこの2つの要因を解消するためのソリューションだと考えています。
まず、費用については、Let’s Encryptのスポンサー企業の支援により、証明書の発行、更新、失効という一連のサービスを全て無償で提供してくれるということ。
次に、証明書セットアップの手間については、サーバソフトウェア(certbot)による作業の自動化により、これまでと比べ、圧倒的に手間のかからない形でセットアップが出来るというのが大きなメリットだと考えています。
簡単にまとめると、

  • 認証局によるWebサイトとドメインの認証
  • 証明書署名要求の生成と送信
  • 証明書の発行と受け取り
  • Webサーバの設定変更
  • 定期的な証明書の更新
  • 証明書の失効

といった処理を、WEBサイト管理者が手動で実施する代わりに、専用のサーバソフトウェアが自動的に処理をしてくれます。

Let’s Encryptの設定方法

それでは、無料のSSL、Let’s EncryptをSSHを使用し設定する方法を説明します。
※サーバはLinuxのCentOSでの設定方法となります

su -
cd /home/admin
git clone https://github.com/certbot/certbot
cd certbot
./certbot-auto

まずは、root権限にログインし、適当なディレクトリにcertbotをダウンロードします。
あとは、certbot-autoを実行するだけで、あとは自動的に処理が進みます。(簡単過ぎる・・・)
処理中に以下のような質問が入ります。

Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): 

こちらは、まず自分のEメールアドレスを入力します。
証明書の更新などを知らせてくれる通知メールを、こちらに指定したアドレスに送ってくれます。

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: 

利用規約に同意するかどうかのチェックです。
OKであれば、Aを入力ください。

-------------------------------------------------------------------------------
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: 

Electronic Frontier Foundation空のメールを受け取るかどうかのチェック。
こちらはYでもNでもどちらでも大丈夫です。

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: cloudconsul.jp
2: www.cloudconsul.jp
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 

こちらは、ドメインのwwwなし、wwwありのどちらにSSLを設定するかの確認です。
弊社ではwwwありの2で設定しています。

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 

http://~でアクセスした際に、https://~にリダイレクトするかどうかの設定です。
基本的には2でOKかと思います。

生成された証明書ファイルは以下の場所に格納されています。

/etc/letsencrypt/live/www.cloudconsul.jp/cert.pem
/etc/letsencrypt/live/www.cloudconsul.jp/privkey.pem
/etc/letsencrypt/live/www.cloudconsul.jp/chain.pem
/etc/letsencrypt/live/www.cloudconsul.jp/fullchain.pem

インストールの確認について

Let's Encryptが本当に設定されたかどうか、実際にブラウザを開き確認しましょう。
URLのhttp://をhttps://に変更し、サイトを確認ください。
問題なく表示されれば、SSLが設定されています。

ssl.confを確認してみます。

vi /etc/httpd/conf.d/ssl.conf

ssl.confを開き、Let's Encryptが設定されている場合、以下の3行の記述が追記されています。

  SSLCertificateFile /etc/letsencrypt/live/www.cloudconsul.jp/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/www.cloudconsul.jp/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/www.cloudconsul.jp/chain.pem

cronを使った自動更新設定について

サーバ証明書が適用されましたが、Let's Encryptでは証明書の有効期限が3ヶ月という期間で設定されますので、3ヶ月おきに更新処理を行わなければなりません。
それは少し面倒ですので、cronで更新処理を自動化させる方法も記載します。

まずはcrontabを開きます。

crontab -e

以下の記述をします。

00 03 01 * * /home/admin/certbot/certbot-auto renew && /sbin/service httpd reload

毎月1日の3時に、cronでcertbotを動かす設定となります。
certbotが証明書を更新したら、httpdをリロードしサーバに反映させます。

最後に

Let's Encryptのインストール方法は以上となります。
但し、サーバのOSが古い場合、インストールがうまく行かない場合もあります。
次の記事では、自動インストールがうまく行かない場合の設定方法をまとめてみたいと思います。

参考

Webデザイナー兼、制作ディレクター。オンライン英会話「ワールドトーク」の立ち上げ、及び40社以上のオンライン英会話、100社以上のオンラインマッチングサイトの立ち上げに関与。毎月SEOとオンラインマッチングビジネスのセミナーで講師として登壇中。

PAGE TOP