最も簡単なLet’s Encryptでの証明書発行

2019年10月25日

ここでは、最も簡単にLet’s Encryptで証明書を得て、それを維持する方法を示す。なお、対象としているのは、少々古いが、CentOS-6.10とApacheだ。

Let’s Encyrptのインストール

インストールについては、検索して調べて見てほしい。

ドメインの用意

ドメインを取得し、そのDNSを設定する。Apacheでコンテンツをサービスする必要はない。単に、

nslookup  ドメイン名

とて、サーバのIPアドレスが出てくればよいようだ。

証明書の発行

certbot-autoを使って証明書作成を要求する。

「certbot-auto certonly -d ドメイン名」とすればよい。

# certbot-auto certonly -d ドメイン名
Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Apache Web Server plugin (apache)
2: Spin up a temporary webserver (standalone)
3: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-3] then [enter] (press 'c' to cancel):

ここで質問されるのだが、要するに「今指定したドメインが、お前の物だと確認する方法を教えろ」ということらしい。Apacheが動いているので1を指定する(ただし、このドメイン名についてのコンテンツサービスは一切していない)。

Plugins selected: Authenticator apache, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for ドメイン名
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/ドメイン名/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/ドメイン名/privkey.pem
   Your cert will expire on 2019-08-28. 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:

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

ということで、どういう仕組みなのかわからないのだが、確認ができたようで、証明書が発行される。証明書は、上に記述されているように「/etc/letsencrypt/live/ドメイン名」の中に入っている。

SSLの設定ではこれを指定すればよい。ちなみに以下のようにしている。

<VirtualHost *:443>
  ServerAdmin webmaster@....
  ServerName ドメイン名

  DocumentRoot /var/www/sites/....
  <Directory /var/www/sites/..../>
    AllowOverride All
  </Directory>

  ErrorLog logs/...._log
  CustomLog logs/...._log combined

  LogLevel warn
  SSLEngine on
  SSLProtocol all -SSLv2 -SSLv3
  SSLHonorCipherOrder ON
  SSLCipherSuite EECDH+HIGH:EDH+HIGH:HIGH:MEDIUM:+3DES:!ADH:!RC4:!MD5:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!PSK:!SRP:!DSS:!KRB5:!DH

  SSLCertificateFile /etc/letsencrypt/live/ドメイン名/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/chain.pem
</VirtualHost>

証明書期限を確認

以下で取得済のすべての証明書の期限を確認できる。

# certbot-auto certificates

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
  Certificate Name: ドメイン1
    Domains: ドメイン1
    Expiry Date: 2019-06-29 19:01:59+00:00 (VALID: 30 days)
    Certificate Path: /etc/letsencrypt/live/ドメイン1/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/ドメイン1/privkey.pem
  Certificate Name: ドメイン2
    Domains: ドメイン2
    Expiry Date: 2019-08-28 03:52:12+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/ドメイン2/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/ドメイン2/privkey.pem

....

今回新たに作成したものは三ヶ月の期限があるようだ。

証明書の更新

証明書は定期的に更新しなければならない。そうでないと期限切れになる。

このやり方はあちこちに記述があるが、極めて簡単。
/etc/crontabに、

 00 05 05  *  * root /opt/certbot/certbot-auto renew

とでも書けばよい(/opt/certbotにインストールした場合)。この例では一月に一度だけrenewするが、やりすぎてはいけないようだ。例えば毎日行うなど。

参考

  • https://letsencrypt.jp/usage/
  • http://qiita.com/yasuken/items/e45eb9efd16199512d4e
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-let-s-encrypt-certificates-for-multiple-apache-virtual-hosts-on-ubuntu-14-04
  • http://serverfault.com/questions/768629/letsencrypt-on-centos-6-with-multiple-virtualhosts
  • https://community.letsencrypt.org/t/cant-figure-out-how-to-set-up-multiple-vhosts-to-work-with-certbot-in-centos-6-8/26263
  • https://www.digicert.com/ssl-support/apache-multiple-ssl-certificates-using-sni.htm