完全無料のLet’s Encryptで自サイトをSSL化

本記事の元となった、自分で記述したWordのPDFを貼り付けておきます。

余計な章がありますので、3章以降をお読みいただければと思います
(すみません、改定の時間をなかなかとれなくて・・・)。

HTMLだと、思うように表示編集することは
わたしには難しくてできませんし、
できたとしてもかなり面倒なことです
(HTMLって、なんでこんなにメンドイんじゃい!
内容を編集するよりも、表示形式の編集に手間ばかりかかりやがる!)。

通常、HTTPSのWebサイトを運用するには、
商用の認証局にSSLサーバー証明書の発行を申し込み、
必ず費用が発生するものでした。

一部限定した目的では無償で利用できるものが用意されており、
サーバーホスティング事業者と認証局との提携
(サーバー利用費用に同梱される形など)で
証明書費用が実質かからないサービスのほか、
GMOグローバルサインが2013年から行っていた
オープンソースプロジェクト向けのプログラムなどがあるくらいでした。

このような状況も、
無料のLet's Encryptのサービスが開始されるに伴って変わってきています。

 

1 Let's Encyptとは?

Let's Encryptは、
すべてのWebサーバーへの接続を暗号化することを目指したプロジェクトです。

https://letsencrypt.org/

 

無料だからといって、
信用に足らないといったサービスでは決してありません。

Let's Encryptの運営母体は、
1990年に設立された 電子フロンティア財団(EFF: Electronic Frontier Foundationです。

2009年に制定された長期的なミッションが「ウェブの暗号化(Encrypting the web)」でした。
安全ではない平文のHTTP通信を、
すべて暗号化したHTTPSに置き換えようという野心的な目標が掲げられたのです。

そして、Let's Encrypt Certificate Authorityが 立ち上がります。
深い知識がなくても、誰もがHTTPSを扱えることを目指しています。

2016年4月12日から正式にサービスを開始しました。
非営利団体のISRG(Internet Security Research Group)が 運営しており、
シスコ(Cisco Systems)、Akamai、
電子フロンティア財団(Electronic Frontier Foundation)
モジラ財団(Mozilla Foundation)といった著名な大手企業・団体が、
ISRGのスポンサーとしてLet's Encryptを支援しています。

Let's Encryptは、
支払い、サーバー設定、メールによる確認、
証明書の更新といった作業を省略することで、
SSL暗号化における設定や保守の複雑さを大幅に削減することを目的にしています。

完全自動化のため、
ドメイン認証(Domain Validation: DV)型証明書のみ発行しており、
企業認証(Organization Validation: OV)型や
EV(Extended Validation)型は提供していません。

日本語ドメインなどの国際化ドメイン名には、対応しているようです。

https://letsencrypt.org/2016/10/21/introducing-idn-support.html

 

多くの共用型レンタルサーバーの無料SSLサービスは、
Let's Encryptを利用しているようです。

 

2 Let's Encryptの利用手順

SSLサーバー証明書の取得、そしてWebサーバーのSSL設定は、
非常に煩雑で難しそうに思われている方も多いのではないでしょうか。

Let's Encryptを利用した場合、
それらはとっても簡単で図2-1に示すように全部で3ステップしかありません。
また、各ステップも難しい煩雑な作業では決してありません。

 


図2-1 Let's Encryptの導入手順

本記事では、CentOS 7上で
Let's EncryptSSLサーバー証明書を発行して
Apache 2.4で利用する手順について説明します。

 

2.1 事前に行っておくべきこと

Let's Encryptで発行される証明書は、いわゆる「DV証明書」という種類の証明書です。

Let's Encryptサーバーは、
発行する証明書の対象のドメインの所有者自身が発行要求をしてきたことを確認した上で、
SSLサーバー証明書を発行します。

具体的にどのようなどのような確認が行われるのかというと、
証明書の発行を要求されたLet's Encryptサーバーは、
発行しようとしている証明書のドメインの80番ポートにアクセスし、
特定の内容のファイルが存在していることを確認します。

問題なくファイルが取得できれば
ドメインの所有者が発行要求を出していることを確認できますので、
これをもって証明書の発行を行うというわけです。

したがって、
Let's EncryptSSLサーバー証明書を取得するには、
下に示すことがされていなければなりません。

当たり前のことといえば、ごく当たり前の事前条件です。

Apache 2.4がすでにインストールされている。
・ インターネットから
HTTPで、80番ポートで公開しているホームページにアクセスできること。

 

2.2 Certbotクライアントのインストール

CentOS 7用のCertbotクライアントは、
EPELリポジトリからインストールすることができます。

次のようにepelリポジトリをインストールした上で、
certbotpython-certbot-apacheをインストールします。

 

【注: 2020年10月22日】

python-certbot-apacheの記述は不要です。
実際には、"# yum install certbot"とだけ、入力してください!
改定版では、直しておきます。
誤った記述で、もうしわけありません。

 

2.3 SSLサーバー証明書の作成

SSLサーバー証明書は、
2.2 Certbotクライアントのインストールで示した
certbotクライアントを実行して発行します。

ここでは、Apache httpdのDocumentRootが「/var/www/www.mywebsite.jp」に
設定されていると仮定して話を進めます。

実際のDocumentRootの設定に合わせて読み替えてください。

 

(1)certbotクライアント

SSLサーバー証明書を取得するためには、
certbotクライアントは、
下に示すように少なくとも次の2つのオプションを指定して実行します。

-dオプション   証明書を発行するサーバーのドメイン
-wオプション   DocumentRootのパスを指定

2つのオプション以外にも、
SSLサーバー証明書の取得に際しては、表3.2-1に示すオプションの利用が可能です。

なお、certbotクライアントの利用可能な全オプションについては、
下に示すページをご参照ください。

https://certbot.eff.org/docs/using.html#certbot-command-line-options

# うわーっ! オプションが多すぎて頭がイテー!!

 

表2-1 certbotのSSLサーバー証明書取得に関するオプション

certbotクライアントを起動すると、
まず下に示すようにメールアドレスを入力するように求められます。

このメールアドレスは、
後に証明書の有効期限が近づいた際にお知らせしてくれたりすることなどに利用されます。

なお、証明書の有効期間は90日間となっています。

次に規約に同意するかを問われます。

同意するためにAと入力します。

次にElectronic Frontier Foundationにメールアドレスを共有するかを問われます。

メールアドレスを共有すると、
EFFや証明書のことなどについてのメールを送ると書かれています。

メーリングリストのようなものです。

メールを受け取りたければYを、
受け取りたくなければNと入力します。


これで証明書の作成が開始されます。
正しく証明書の作成が行われた場合は、次のように出力されます。


これで証明書の発行は終了です。

 

(2)SSLサーバー証明書が保存される場所

Let's Encryptで取得するSSLサーバー証明書は、
サーバー証明書中間CA証明書の2つの証明からなります。

中間CA証明書とは、
電子証明書(デジタル証明書)を発行する認証局が、
自分自身の認証のために発行する電子証明書の1つです。
中間証明書」とも言います。

CAとは「Certification Authority」の略で、認証局を意味します。

電子証明書はインターネット上で本人証明を行うために使用されており、
この証明書を発行する「信頼できる第三者」のことを認証局と言います。

他にも、暗号化用の秘密鍵も取得します。

サーバー証明書秘密鍵
/etc/letsencrypt/archive/」以下に保存され、
表2-2に示すパスにシンボリックリンクが作成されます。

シンボリックリンクのリンク先は、
SSLサーバー証明書を更新するたびに新しい証明書に変更されます。

 

表2-2 SSLサーバー証明書の保存パス

 


 

2.4 Apache 2.4への設定

SSLサーバー証明書が作成できたら、Apache 2.4に設定を追加します。

ssl.confの次に示す項目に、それぞれ設定します。

SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile


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

 

3 SSL証明書の自動更新

Let's Encryptの証明書の有効期限は90日間 と比較的短いため、定期的に更新する必要があります。

これは自動更新を前提としているためのようです。

自動更新は、「certbot renew」コマンドを実行するだけです。

証明書の有効期限をチェックして、期限が近づいていれば更新してくれます。

また、即時に証明書を更新したい場合は
--force-renewal」オプションを付けて実行します。

ただし、承認数に上限があるようで、
このオプションを付けて毎日コマンドを実行してしまうと、
制限に引っかかってしまうようです。

実行するのは月1回程度に制限すると良いでしょう。

手動でコマンドをたたくことは、忘れてしまうこともあり面倒なことでもあるので、
crontabに登録するようにします。

下に示す例は、毎月1日の午前2時に証明書を自動更新し、
Apacheをリロードするようになっています。

日本国内向けのサイトであれば、
アクセスの少ない午前2時から午前5時の間を選ぶと良いかと思います。

 


以上