168
202

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

無料でHTTPS化できる「Let's Encrypt」をやってみた ※install.sh付き

Last updated at Posted at 2017-10-07

2017年10月からGoogleが全てのHTTPページに警告を出すことになりました。
それに伴い、今後はサイトがHTTPSとなっているかどうかも、SEOに影響を及ぼすことになってしまったのです。
(恐ろしいですね…)

そこで今回は、無料でSSL証明書を発行することが出来るLet's Encryptを使って、サイトをHTTPSにする方法を書いてみました。
インストール用のシェルも最後に載せてあるので、よかったらそちらもご利用ください。
※シェルだけ欲しいという方はこちらから
https://gist.github.com/daiki44/12bb21e71739da70f8ef751c7ead2b8e#file-letsencrypt-sh

実行環境

  • CentOS 6
  • apache 2.2

1.Let's Encryptとは?

今まで、サイトをSSL化するためには、1年単位でライセンスを購入し、その証明書を用いる必要がありました。

こいつがピンきりですが高いものはめちゃくちゃ高くて、年間数千円~十数万円の費用がかかるのが普通でした。

そこで、「インターネットを介した安全な通信を行う際の、経済面・技術面・教育面での障壁を減らすこと」を指名として活動している、非営利団体のISRG(Internet Security Research Group)が開発したのが、このLet's Encryptなのです。

これを使えば無料かつ、面倒な更新手続き・運用を自動化しながら、安全な通信を行うことが出来るようになります。

2.証明書を発行しよう!

2-1.certbotのインストール

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

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

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

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

2-2.certbot-autoコマンドで証明書を発行する

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

certbot-auto.sh
$ certbot-auto certonly --webroot -w /var/www/hoge -d hoge.com --email hoge@hoge.com

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

下記のようなメッセージが出たら、無事、発行完了です。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/hoge/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/hoge/privkey.pem
   Your cert will expire on 2017-12-23. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

2-3.apacheに証明書を設定

証明書が発行されると、
/etc/letsencrypt/live に置かれます。

$ sudo ll /etc/letsencrypt/live/

// ドメイン別でdirが出来る
drwxr-xr-x 2 root root 4096  Sep 25 2017 hoge.com
drwxr-xr-x 2 root root 4096  Sep 25 2017 foo.com

// 中身はシンボリックリンクが貼られている
$ sudo ll /etc/letsencrypt/live/
lrwxrwxrwx 1 root root  36  Sep 25 2017 cert.pem -> ../../archive/hoge.com/cert1.pem
lrwxrwxrwx 1 root root  37  Sep 25 2017 chain.pem -> ../../archive/hoge.com/chain1.pem
lrwxrwxrwx 1 root root  41  Sep 25 2017 fullchain.pem -> ../../archive/hoge.com/fullchain1.pem
lrwxrwxrwx 1 root root  39  Sep 25 2017 privkey.pem -> ../../archive/hoge.com/privkey1.pem

今回はapacheで利用するので、これらの発行された証明書をapacheに読み込ませていきましょう。

httpd.conf
<VirtualHost *:443>
    ServerAdmin hoge@hoge.com
    ServerName hoge.com

    DocumentRoot /var/www/hoge

    # ここはお好みで
    <Directory /var/www/hoge>
        # .htaccessの許可
        AllowOverride All
    </Directory>

    # logを吐く場所
    ErrorLog /var/log/httpd/hoge_ssl_error.log
    CustomLog /var/log/httpd/hoge_ssl_access.log combined

    # SSLを設定し、証明書を読み込ませる
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/hoge.com/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/hoge.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/hoge.com/fullchain.pem
</VirtualHost>

confの設定が終わったら、apacheをgracefulしましょう。

$ sudo service httpd graceful

3.証明書自動更新の設定

Let'sEncryptは無料でとても良いサービスなのですが、証明書の有効期限が90日で切れてしまいます。
ただ、証明書の更新を行えばその期限は持続されるので、最後にその自動化を行っていきます。
自動化は簡単でcronを使えばOKです。

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

4.豆知識まとめ

4-1..htaccessによるHTTP→HTTPSへのリダイレクト

SSL設定が終わった後によくやるやつです。

.htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

4-2.IP制限を行っている場合の対応

Let's Encryptでは更新時に外部からのアクセスが発生するため、apache等でIPアドレスによるアクセス制限を行っていたりすると、更新に失敗することがあります。

その制限を解除するためには、以下の設定をapache.confに追記します。
※今回はapacheでアクセス制限をしているとします。

<Directory "/var/www/hoge/.well-known">
    <RequireAll>
        Require all granted
    </RequireAll>
</Directory>

5.インストールシェルをつくりました

※rootユーザーで叩いてください!

install.sh
#!/bin/sh

#-------------------------------------
echo "パスの通っている場所を入力してください (ex. /usr/bin)"
read INSTALL_PATH
#-------------------------------------

#-------------------------------------
echo "RootDirectoryを入力してください (ex. /var/www/hoge)"
read WEBROOT
#-------------------------------------

#-------------------------------------
echo "対象ドメインを入力してください (ex. hoge.com)"
read DOMAIN
#-------------------------------------

#-------------------------------------
echo "管理用メールアドレスを入力してください (ex. hoge@hoge.com)"
read EMAIL
#-------------------------------------


# certbotが未インストール時のみインストール
if ! type certbot-auto > /dev/null 2>&1; then
  sudo curl https://dl.eff.org/certbot-auto -o $INSTALL_PATH/certbot-auto
fi

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

# 証明書発行
sudo certbot-auto certonly --webroot -w $WEBROOT -d $DOMAIN --email $EMAIL

参考文献

168
202
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
168
202

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?