Let's encrypt の無料SSL証明書 発行の追加情報
これは、以前Qiitaに投稿した
シェルスクリプトでLet's encryptの無料SSL証明書を発行(CentOS6対応)
の追加情報です。
Let's encrypt の SSL発行は前記のリンクを参照して下さい。
SANsに対応させた証明書を発行したい
1枚のSSL証明書で複数ドメインの設定が可能な、SSLサーバー証明書の拡張機能に「SANs」という機能があります。
使い方としては、 www.yourdomain.com でも、wwwをつけない yourdomain.com でアクセスされてもSSL証明書を有効にしたい場合などに使えます。
つまり1つのSSL証明書に、www.mysite.com と mysite.com の2つのドメインを入れることができるのです。実際には2つとは限らず複数ドメインに対応させることが可能です。
対応させるには、ACLの項目を追加し、認証用のacme-challengeファイルの格納される位置を、スペースで区切って複数指定します。
SANS="www.yourdomain.com"
ACL=('/var/www/html/.well-known/acme-challenge' '/var/www/html/.well-known/acme-challenge')
上記は、yourdomain.com に www.yourdomain.com のSANsを追加対応させる例です。
証明書を強制的に作成したい
設定を間違えってしまった場合など、もう一度設定ファイルを書き換えても、 オプションをつけてコマンドを実行しないと証明書を上書き再発行できません。
こういう場合には、 -f オプションで強制再発行を実行して下さい。
#./getssl -f yourdomain.com
証明書を自動更新したい
Let's encrypt の無料SSL証明書は、証明書の有効期限が90日です。有効期限内に更新しなくてはなりません。
こういう場合は、CRONtabに下記の1行を追加設定して自動的に証明書が更新されるように設定します。
00 04 01,15 * * /root/getssl -u -a -q
上記は。毎月1日と15日の午前4時に更新チェックをして、必要なら更新する例です。 -a オプションで全てのドメイン(~./getssl/以下にある全てのドメイン設定ファイル)を更新します。
証明書が更新された後にWEBサーバーを再起動したい
前項のように証明書が延長再発行されても、再読込しなければ有効にはなりません。
この場合、更新後にWEBサーバーの設定を再読み込みするように設定できます。
RELOAD_CMD=('systemctl reload httpd')
ログファイルのローテション等で別途再起動していれば、これは設定しなくても問題ありません。
WordPress対策
Let's encryptでは、証明書を発行する際のチェックとして、.well-known/acme-challengeファイルを置き、ポート80をhttpアクセスしてこのファイルを確認して認証を行います。
WordPressでは、URLをリダイレクトするので、そのままでは正常に認証できません。
また、常時SSL環境ではWordPressに限らず、httpをhttpsにリダイレクトする場合も多々あります。
この場合、下記のように httpd.conf ファイルのVirtualHost部分を書き換え、alias設定をして、WEBサーバーを再起動することにより対応可能です。
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName www.yourdomain.com
# for Let's Encrypt
Alias /.well-known/ /var/www/html/.well-known/
</VirtualHost>
WordPressを置いてある .htaccess を書き換えるほうが簡単で事例も多いのですが、WordPressやプラグインは.htaccessファイルを書き換えることがあるので、alias設定をしてしまったほうが運用上安心です。
nginxサーバーに対応した証明書を発行したい
nginxでは、Apacheのように中間証明書が設定できず、ドメインの証明書と中間証明書を1つのファイルに連結させて指定する必要があります。
.getssl以下のドメインのディレクトリに、 fullchain.crt というファイル名でドメインの証明書と中間証明書を1つのファイルにして生成されています。
生成後に他のディレクトリにコピーする場合は、以下のように設定を追加します。
DOMAIN_CHAIN_LOCATION="/etc/ssl/fullchain.crt"