さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

Let's Encryptを利用してWebサイトをHTTPS化した

弊社のサイトにてHTTPSアクセスを行えるようにしました。

今回使用するSSL証明書はLet's Encryptという、電子フロンティア財団が運営し発行している証明書です。
無料であり、簡単に導入ができます。
また、無料ということもあってか有効期限が3か月と短いですが、更新処理をcronなどで定期実行すれば問題ないため、ここら辺のやり方はまた後日記事に起こすとして今回は証明書の導入をおこないHTTPS接続できるところまでをやっていきたいと思います。

なぜ、Let's Encryptにしたのかといいますと、弊社のサイトはまだhtmlとcss、javascriptのみで作成しておりサーバープログラムを配置してサーバー側とデータのやり取りも行っておりません。
そのような状態で有料の証明書を購入してもコストがかかります。
また、Let's EncryptはバックにCiscoやMozillaといった世界的企業が出資して運営されているため将来性があります。
というような状況から現状はわざわざ有料ではなくLet's Encryptで十分なのではないかという判断を行いました。

それでは早速、本題に移っていきいます。

1.環境

  • さくらVPS CentOS6.9

2.前提条件

  • Apacheがインストールされていること
  • バーチャルホストが設定されていること。
  • mod_sslがインストールされていること。
  • rootユーザーで実施すること

mod_sslのインストールはこちらから

3.ファイアーウォールの設定

※ファイアーウォールにて443ポートが解放されている場合は、この手順を省く

3-1.ファイアーウォールにて443ポートを解放する

iptables -I INPUT 6 -p tcp -m tcp --dport 443 -j ACCEPT

3-2. 設定を保存する

service iptables save

3-3. 設定されているか確認する

以下のコマンドを叩き

cat /etc/sysconfig/iptables

「-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 」の1行が追加されていばオッケー

# Generated by iptables-save v1.4.7 on Tue May 8 22:59:08 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [55:6148]
:f2b-SSH - [0:0]
-A INPUT -p tcp -m tcp --dport 22 -j f2b-SSH 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
-A f2b-SSH -j RETURN 
COMMIT
# Completed on Tue May 8 22:59:08 2018

1-4. https通信が許可されているかを確認する

iptables --list

2.Certbotを導入する

2-1.Certbotをダウンロードするする

wget https://dl.eff.org/certbot-auto

2-2.ダウンロードファイルの権限を変更する

chmod a+x certbot-auto

3.Certbotによる証明書発行手続きを行う

以下のコマンドでCertbotを起動する

./certbot-auto

4.Apacheの設定ファイル修正

4-1.ssl.confを修正する

下記の三か所をCertbotにより自動生成されたファイルに置き換える

SSLCertificateFile /etc/letsencrypt/archive/[各自のドメイン名(example.com)]/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/archive/[各自のドメイン名(example.com)]/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/archive/[各自のドメイン名(example.com)]/chain.pem

5.動作確認

サイトのURLの「http://」を「https://」に変更してアクセスします。 表示されたサイトのアドレスバー左側に鍵マークと一緒に「保護された通信」と表示されていれば完了です。 ※スマホから確認する場合には鍵マークのみがついているかと思います

6.最後に

このような感じで簡単に証明書の導入ができhttps化が行えました。 今後、サイトが大きくなった時には企業認証(EV)などを検討し 今後は証明書の自動更新などを設定して行こうと思います。