CentOS 7 + Apache 2.4 で Let’s Encrypt の証明書を導入する手順

 本稿では、CentOS 7 上で Let’s Encrypt の無償のSSL/TLSサーバー証明書を発行して Apache 2.4 で利用する手順について解説します。 なお、2015年12月現在、Let’s Encrypt は Public Beta のサービスであるため、今後手順が変更される可能性がある点に気をつけてください。

手順と事前知識

 まずは Let’s Encrypt で SSL/TLS サーバー証明書を発行するにあたり知っておくべき手順と事前知識について解説します。

Let’s Encrypt サーバーとクライアント

 Let’s Encrypt における証明書発行の手順は、そのほとんどが自動化されています。 その自動化を担っているのが Let’s Encrypt のサーバーとクライアントソフトウェアです。 Let’s Encrypt を利用するのに最初にやるべきことは、証明書を設定しようとしているマシンに Let’s Encrypt のクライアントをインストールすることです。 インストールした Let’s Encrypt のクライアントが、 Let’s Encrypt のサーバーとやり取りすることで証明書の発行と設定を自動的におこなってくれます。

事前に設定しておくべきこと

 証明書の作成・発行の実行中は、上記通り Let’s Encrypt のクライアントとサーバーが自動的にやりとりしてくれるわけですが、その際に Let’s Encrypt のクライアントが一時的に80番ポートでサービスを起動させます。 ですので証明書の発行作業中は別の80番ポートを利用するサービスやアプリケーションを停止しておく必要があります。 Apache や Nginx などのサーバーをあらかじめ停止してから、Let’s Encrypt の証明書発行作業を行うようにしてください。

 Let’s Encrypt で発行される証明書はいわゆる「DV証明書」という種類のものです。 Let’s Encrypt サーバーは、証明書の発行要求を受けた対象ドメインの所有者自身が発行要求をだしていることを確認した上で、SSL/TLSサーバー証明書を発行します。 具体的にどのような確認が行われるのかというと、証明書の発行を要求された Let’s Encrypt サーバーは発行しようとしている証明書のドメインの80番ポートにアクセスし、Let’s Encrypt のクライアントと通信できることを確認します。 問題なく通信ができればドメインの所有者が発行要求を出していることを確認できますので、これをもって証明書の発行を行うというわけです。

 事前の説明はこれくらいにしておいて、それではさっそく Let’s Encrypt での証明書の発行手順を説明します。

クライアントをインストールするための事前準備

 Let’s Encrypt のクライアントは GitHub で公開されています。 GitHub からクライアントを取得するために Git が必要ですので、Git をインストールします。 また Apache に mod_ssl をインストールしていない場合は、openssl, mod_ssl を同時にインストールしておきましょう。

# yum install -y git openssl mod_ssl

Let’s Encrypt クライアントのインストール

 まずは Let’s Encrypt クライアントを GitHub から取得します。 今回は Let’s Encrypt クライアントを /opt 配下に設置することとします。

# cd /opt
# git clone https://github.com/letsencrypt/letsencrypt
Cloning into 'letsencrypt'...
remote: Counting objects: 25288, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 25288 (delta 2), reused 0 (delta 0), pack-reused 25275
Receiving objects: 100% (25288/25288), 6.65 MiB | 727.00 KiB/s, done.
Resolving deltas: 100% (17714/17714), done.

 つづいて Let’s Encrypt のヘルプを表示します。 ヘルプを表示させるのには理由があります。 Let’s Encrypt は起動のたびに最新の Let’s Encrypt クライアントを構築しようと、依存ソフトウェアの取得やアップデートを行います。 よって初回の起動であるここでは、ヘルプを表示させようとすることで、Let’s Encrypt のクライアントを構築します。 つぎのように letsencrypt-auto コマンドにオプションを指定して実行します。 すると処理が開始されます。 Let’s Encrypt の実行に必要な依存ソフトウェアが自動的に取得されることでしょう。 主に Phython の実行環境が CentOS にインストールされます。 必要なソフトウェアの取得や構築が終わると、letsencrypt-auto コマンドのヘルプが表示されます。

# cd letsencrypt
# ./letsencrypt-auto --help --debug

 これで Let’s Encrypt クライアントを実行するための準備が整いました。

SSL/TLS証明書の作成

 それでは Let’s Encrypt クライアントを実行して証明書を作成しましょう。 次のようにオプションを指定して letsencrypt-auto コマンドを実行します。 -d オプションには、証明書を発行するサーバーのドメインを指定します。

# ./letsencrypt-auto certonly --standalone -d www.hogemoge.net

 すると次のような画面が表示されます。 メールアドレスを入力しして「OK」します。 (Enterを押します)

Let's Encrypt

 次に規約を読んだ上で同意するようにとの表示が現れますので「Agree」を選択します。

Let's Encrypt

すると、前述のとおり Let’s Encrypt クライアントとサーバーの通信などが行われて、つぎのように証明書の作成が完了します。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/[your domain]/fullchain.pem. Your
   cert will expire on 2016-03-07. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
...

 作成されたサーバー証明書は /etc/letsencrypt/live/[発行したサーバーのドメイン]/ 内に作成されました。

Apache 2.4 への設定

SSL/TLSサーバー証明書が作成できましたので、Apache 2.4 に設定を追加します。 ssl.conf の SSLCertificateFile SSLCertificateKeyFile SSLCertificateChainFile にそれぞれ設定します。

[/etc/httpd/conf.d/ssl.conf]
...
SSLCertificateFile /etc/letsencrypt/live/[サーバーのドメイン]/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/[サーバーのドメイン]/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/[サーバーのドメイン]/chain.pem
...

 これで Apache httpd を再起動して完了です。

# systemctl start httpd

 それではさっそく https://[サーバーのドメイン]/ にアクセスしてみましょう。 アクセスすることができましたでしょうか? もし接続できない場合は、SELinux や firewalld などによりアクセスが遮断されていないかを確認してください。

 ブラウザで証明書の情報を確認してみると Let’s Encrypt で発行したものだということがわかると思います。

Let's Encrypt

 これで Let’s Encrypt での証明書の設定は終了です。

おわりに

 本稿では、CentOS 7 で Let’s Encrypt で発行されたSSL/TLS証明書を Apache 2.4 に設定する手順について解説しました。 個人でも手軽にSSL/TLS証明書が手に入れられるようになったのは、とても革新的だと思います。 是非積極的に利用したいものです。

著者 : OSCA

OSCA

 初級WEBエンジニアです。最近は Android, iOS, WEBアプリの作成に力を入れています。 個人として何か一つでも世の中の多くの人に使ってもらえるアプリを作ろうと日々奮闘中です。