Let’s Encrypt のSSL/TLS 証明書をこのブログに導入した手順をシェアするよ

ウェブサーバ運用

このブログに、Let’s EncryptのSSL/TLS証明書をインストールしてみましたので、その方法をシェアしておこうと思います。

まず、最初に断っておきますが、普通のレンタルサーバーを利用している場合には、この方法は使えません。前提として、サーバーのroot権限を持っている必要があります。もし言っている意味が分からないという場合は、root権限を持っていないでしょうから、残念ですが諦めてください。

(ちなみにこのブログは、さくらのVPSで運用していますので、root権限を持っています。うひひ)

これまでにいくつかのサーバーにインストールしましたが、慣れれば数分で設定できちゃいます。

SSL/TLS証明書といえば、これまでは年間数千円から数万円のコストを払う必要がありましたけど、無料で導入できれば気軽にいろんなサイトに導入出来ますので本当にありがたいですね。

それでは早速導入してみましょう!

Let’s Encryptのクライアントソフトウエアをインストールする

このページに書いてある手順で進めます。

https://letsencrypt.jp/usage/

まずはクライアントソフトウエアをサーバにインストールします。尚、このサーバーは、CentOS6で運用していますので、その条件で説明します。

マニュアルに沿って、必要なリポジトリを追加します。

$ sudo yum install epel-release

クライアントソフトをインストールするディレクトリに移動します。今回は「/usr/bin」にインストールすることにしました。

$ cd /usr/bin

クライアントソフトをダウンロードします。

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

ダウンロードしたファイルに実行権限を与えます。

$ sudo chmod a+x certbot-auto

クライアントを実行します。

$ sudo ./certbot-auto

クライアントを実行すると、クライアントの実行に必要な複数のパッケージがインストールされます。

インストールが完了すると、メールアドレスを尋ねられます。

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

素直に自分のメールアドレスを入力します。

使用許諾に同意を求められますので、「A」をタイプします。

Please read the Terms of Service at

404 Page not found - Let's Encrypt
Let's Encrypt is a free, automated, and open certificate authority brought to you by the nonprofit Internet Security Res...
You must agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
(A)gree/(C)ancel:

メールアドレスをシェアしても良いかと尋ねられるので、YかNお好きな方で。

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:

このサーバーに設定されたドメインの中から、そのドメインのhttpsを有効にするか尋ねられます。

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: xxxxxxxxx.com
2: xxxxxxxx.com
-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):c
Please specify --domains, or --installer that will help in domain names autodiscovery, or --cert-name for an existing certificate name.

一覧表示された中から、番号をコンマ区切りでタイプすれば自動的に証明書が取得されて、インストールまで行われるようですが、Apacheの設定ファイルを自動で書き換えられるのがちょっと怖いので、今回は手動で設定することにしました。なので、番号を入力せず「c」をタイプして自動設定を回避します。

SSL/TLS証明書を取得する

証明書を取得します。

$ ./certbot-auto certonly --webroot -w [ドキュメントルートのパス]  -d [ドメイン名]

このブログの場合は、こんな感じです。

$ ./certbot-auto certonly --webroot -w /var/www/html/com.bagooon.blog -d blog.bagooon.com

以下のように表示されたら、無事に取得完了です。

Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Let’s Encrypt は、有効期限が90日しかありませんので、自動的に証明書を更新されるようcronを設定します。
以下のコマンドが1日に1回実行されるように設定します。crontabやwebminなどお好きな方法でどうぞ。

/usr/bin/certbot-auto renew --renew-hook "apachectl restart"

このコマンドにより、取得済みの SSL/TLS サーバ証明書のうち、有効期限が近い証明書があれば自動的に更新が行われます。証明書が更新された場合は、Apacheも自動的に再起動されて新しい証明書が適用されます。

Apacheのバーチャルホストの設定を書き換える

続いて、Apacheのバーチャルホストの設定ファイルを編集します。https化するドメインのバーチャルホストの設定ファイルを開いて、<VirtualHost *:80>~<・VirtualHost>をコピーして、その下にペーストします。ペーストした設定部分を以下のように編集します。

ServerName blog.bagooon.com
DocumentRoot /var/www/html/com.bagooon.blog

ErrorLog logs/error_log
CustomLog logs/access_log combined



# ↓以下は複製した設定部分

# ポートを80から443に書き換える


ServerName blog.bagooon.com
DocumentRoot /var/www/html/com.bagooon.blog

ErrorLog logs/error_log
CustomLog logs/access_log combined

# 以下の4行を書き加える
SSLCertificateFile /etc/letsencrypt/live/blog.bagooon.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/blog.bagooon.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/blog.bagooon.com/chain.pem



保存したら、書式が間違っていないか確認します。

$ sudo apachectl configtest
Syntax OK

Apacheを再起動して、SSL/TLSを有効にする

問題なければ、Apacheを再起動します。

$ sudo service httpd restart

httpsでアクセスして、無事に表示されたら完了です。Chromeだと、URLバーにこんな風に「保護された通信」と表示されます。

cssや外部スクリプト、画像のリンクなど、一つでも「http://~」でリンクされていると、保護された通信となりませんので修正が必要になります。wordpressなら、テンプレートにSimplicityを使えば、自動的に修正してくれる機能があるのでお勧めです。

保護された通信にならない場合、どのファイルが原因なのか調べる方法は、また後日に書こうと思います。

今日はこれで終わり!

コメント

  1. 村田吉広 より:

    こちらの記事にお世話になりました。

    VPSで運用しているサーバーで複数のドメインを設定すると443ポートが重複しています、先のものが優先されますとなり、1つしかSSL接続ができません。
    何かヒントはありませんでしょうか。

    • bagooon より:

      そのような状態になったことがないので、よく分からないのですが、サーバーを複数インストールしてるとか?
      それぞれのサーバーが443ポートを開こうとしてぶつかっているのかなと。
      ごめんなさい、ちょっと分からないです。

タイトルとURLをコピーしました