2018年3月よりLet’s EncryptのSSLサーバ証明書でワイルドカードが利用可能となりましたので、設定手順を記しておきます。有効期限が90日(約3ヶ月)と短いですが、自動更新設定しておくことで定期的に更新されますので、手動で更新する必要が無くなります。

自動更新設定は以下サイト参照
https://qiita.com/ooxif/items/99ad3c93d4d6862d45f0

実施環境

環境は以下の通りです。

  • CentOS 7.2
  • Apache 2.4.25

ドメインは便宜上hogehoge.comのワイルドカード設定とします。

Certbotインストール

まずは以下のコマンドでCertbotをインストールします。(インストール済みの場合は不要です)
Certbotは0.22.0からACMEv2に対応しており、DNS-01チャレンジにも対応しているそうです。

yum -y install certbot

SSLサーバ証明書のファイル生成

以下のコマンドで証明書ファイルを生成します。
ワイルドカードで生成する場合は *.hogehoge.com と記述します。

certbot certonly --agree-tos --manual-public-ip-logging-ok --manual -d "[*.hogehoge.com]" --preferred-challenges dns-01 --email [hogehoge@hogehoge.com] --server https://acme-v02.api.letsencrypt.org/directory

途中でメール送付の同意を求められるので、N+Enter

me-v02.api.letsencrypt.org/directory
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

-------------------------------------------------------------------------------
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: N
Starting new HTTPS connection (1): supporters.eff.org
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for [hogehoge.com]

-------------------------------------------------------------------------------
Please deploy a DNS TXT record under the name
_acme-challenge.[hogehoge.com] with the following value:

nGNi1RAdKbZD79bPo-harcARZ66b2XJWlMsmrUHtiHc

Before continuing, verify the record is deployed.
-------------------------------------------------------------------------------
Press Enter to Continue

すると、_acme-challenge.[hogehoge.com]に対して、トークンが発行されますので、
指定ドメインのTXTレコードに上記で指定されたトークを設定します。

DNSサーバを自前で用意していない場合は、ドメインを管理しているレジストラ(お名前.comやムームードメインなど)で設定します。

DNSの設定は、反映に時間がかかる場合がありますので、反映されるまで暫く待機します。
DNSの反映が済みましたら、Enter押下で照合・証明書ファイル生成が行われます。

Waiting for verification...
Resetting dropped connection: acme-v02.api.letsencrypt.org
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/hogehoge.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/hogehoge.com/privkey.pem
   Your cert will expire on 2018-06-14. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot 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

ちなみに、失敗すると以下のようなエラーメッセージが表示されます。

Failed authorization procedure. [hogehoge.com] (dns-01): urn:ietf:params:acme:error:connection :: The server could not connect to the client to verify the domain :: DNS problem: NXDOMAIN looking up TXT for _acme-challenge.[hogehoge.com]

SSLサーバ証明書の確認

上記で証明書ファイルの生成を行うと、以下ディレクトリが生成されていますので、確認してみましょう。(ドメイン名に応じて任意のディレクトリとなっているはずです。)

[root@hogehoge hogehoge.com]# ls -la /etc/letsencrypt/live/hogehoge.com/
total 12
drwxr-xr-x 2 root root 4096 Mar 16 21:40 .
drwx------ 3 root root 4096 Mar 16 21:40 ..
lrwxrwxrwx 1 root root   34 Mar 16 21:40 cert.pem -> ../../archive/hogehoge.com/cert1.pem
lrwxrwxrwx 1 root root   35 Mar 16 21:40 chain.pem -> ../../archive/hogehoge.com/chain1.pem
lrwxrwxrwx 1 root root   39 Mar 16 21:40 fullchain.pem -> ../../archive/hogehoge.com/fullchain1.pem
lrwxrwxrwx 1 root root   37 Mar 16 21:40 privkey.pem -> ../../archive/hogehoge.com/privkey1.pem
-rw-r--r-- 1 root root  543 Mar 16 21:40 README

シンボリックリンクで、数字付きのファイルを見ていますが、証明書を更新する際ににシンボリックリンクの向きも更新されますので、特にパスの変更は必要ありません。

SSLサーバ証明書の設定

Apache2.4の場合の記述です。
httpd-ssl.conf 等で上記の証明書を読むように指定します。
SSLの暗号化強度の設定等はここでは割愛します。

    SSLEngine on
    SSLCertificateKeyFile /etc/letsencrypt/live/hogehoge.com/privkey.pem
    SSLCertificateFile /etc/letsencrypt/live/hogehoge.com/cert.pem
    SSLCertificateChainFile /etc/letsencrypt/live/hogehoge.com/chain.pem

上記を記述後にapacheの記述にシンタックスエラーが出なければ、再起動をして完了です。

apachectl configtest
apachectl graceful

Webサイトの場合はブラウザから証明書を確認してみると、無事更新されています。

証明書の自動更新設定

先述のとおり、Let’s Encryptは90日間の有効期限ですので、自動更新の設定をしておくべきです。DNSの設定でエラーが発生したので、以下のサイトを参考にcloudflareでネームサーバを変更すれば対応可能です。
https://qiita.com/ooxif/items/99ad3c93d4d6862d45f0