Let’s Encrypt SSL証明書をサブドメインも合わせて取得する

2017-11-18 12:00
WEB

経緯

  • .htaccessで以下を設定しようとした
    • http → https に統一
    • wwwあり → wwwなし に統一
  • https://www.~ にアクセスした際、安全でない接続と判断されてしまう
    • サブドメイン www に対する証明書を取得していないため

Let’s Encrypt の仕様を確認

  • 1枚の証明書で複数ドメイン・サブドメインに対応することはできる。
    • サブドメインのワイルドカード指定はできない。

1枚で複数のドメイン名に対応する証明書は発行できますか?

はい。サブジェクトの代替名(SAN : Subject Alternative Name)という仕組みを使用することで、1枚の SSL/TLS サーバ証明書を、複数の異なるドメイン名・サブドメイン名で使用することが可能です。

Certbot クライアントの証明書取得コマンド実行時に、複数のドメイン名・サブドメイン名を指定することで、複数ドメイン名・サブドメイン名に対応した証明書を取得することができます。

Webブラウザは、Webサイトのドメイン名・サブドメイン名がサブジェクトの代替名(SAN : Subject Alternative Name)のリストに掲載されていれば、正当な証明書として受け付けます。

よくある質問 – Let’s Encrypt 総合ポータル

  • インストール時に -d で複数ドメインを指定する必要がある。

Webサーバ(Apache や nginx など)が動作している環境において、

“example.jp” と “www.example.jp” に対応する証明書を取得する場合:

入力するコマンド:

certbot certonly –webroot -w /var/www/html -d example.jp -d www.example.jp

※オプション -w で指定されている /var/www/html は、Webサーバ(Apache や nginx など)における、証明書を取得するドメイン名に対応した DocumentRoot に置き換えてください。

※オプション -d で指定されている example.jp www.example.jp は、証明書を取得するドメイン名・サブドメイン名に置き換えてください。

※このコマンドで取得した証明書は、FQDN “example.jp” と “www.example.jp” に対してのみ有効です。

“sub.example.jp”, “sub.www.example.jp”, “www2.example.jp” などの FQDN に対しては無効です。

Let’s Encrypt の使い方 – Let’s Encrypt 総合ポータル

証明書を取得しなおす

取得した証明書を失効させて削除する
  • /etc/letsencrypt/archive/{ドメイン名}/の中にあるpemファイルを確認
# cd /etc/letsencrypt/archive/{ドメイン名}/
# ls   
cert1.pem  chain1.pem  fullchain1.pem  privkey1.pem
  • 上記のcert1.pemを指定してrevoke実行
# certbot revoke --cert-path /etc/letsencrypt/archive/{ドメイン名}/cert1.pem
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

<hr>
Would you like to delete the cert(s) you just revoked?
<hr>
(Y)es (recommended)/(N)o: 
  • 失効後に証明書を削除するか聞かれるので、yを入力してreturn
<hr>
Deleted all files relating to certificate {ドメイン名}.
<hr>

<hr>
Congratulations! You have successfully revoked the certificate that was located
at /etc/letsencrypt/archive/{ドメイン名}/cert1.pem

<hr>
  • 関連ファイルが消えたことを確認
    • /etc/letsencrypt/archive/{ドメイン名}
    • /etc/letsencrypt/live/{ドメイン名}
    • /etc/letsencrypt/renewal/{ドメイン名}.conf
  • Apacheを再起動したいが、ssl.confに削除したファイルへの記述があるためエラーがでてしまう
    • 秘密鍵:SSLCertificateKeyFile
    • SSLサーバ証明書:SSLCertificateFile
    • 中間CA証明書:SSLCertificateChainFile
# vi /etc/httpd/conf.d/ssl.conf
    211 ServerName {ドメイン名}
    212 SSLCertificateFile /etc/letsencrypt/live/{ドメイン名}/cert.pem
    213 SSLCertificateKeyFile /etc/letsencrypt/live/{ドメイン名}/privkey.pem
    214 Include /etc/letsencrypt/options-ssl-apache.conf
    215 SSLCertificateChainFile /etc/letsencrypt/live/{ドメイン名}/chain.pem
  • 元のssl.confのBAKをとっておらず、元に戻せなかったので、mod_sslをremoveしてinstallし直す
    • CertbotのApache用プラグインも一緒にremoveされてしまうので、それも再インストールする。
# yum remove mod_ssl
<a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a>=
 Package                         Arch            Version                          Repository         Size
<a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a>=
Removing:
 mod_ssl                         x86_64          1:2.4.6-67.el7.centos.6          @updates          224 k
Removing for dependencies:
 python2-certbot-apache          noarch          0.19.0-1.el7                     @epel             594 k

Transaction Summary
<a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a><a name="=" id="="></a>=
Remove  1 Package (+1 Dependent package)
# yum install mod_ssl
# yum install certbot-apache
  • Apacheを再起動→できた!
# systemctl restart httpd
  • ブラウザからssl通信ができている&証明書が無効化されていることを確認。
  • 念のためssl.confのBAKをとっておく。
# cp ssl.conf ssl.conf.default
証明書の再取得
  • 下記2つのドメインに対して取得する
    • hi3103.net
    • www.hi3103.net
# certbot certbot --apache -d hi3103.net -d www.hi3103.net
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
tls-sni-01 challenge for hi3103.net
tls-sni-01 challenge for www.hi3103.net

We were unable to find a vhost with a ServerName or Address of hi3103.net.
Which virtual host would you like to choose?
(note: conf files with multiple vhosts are not yet supported)
<hr>
1: ssl.conf                       |                       | HTTPS | Enabled
<hr>
Press 1 [enter] to confirm the selection (press 'c' to cancel):
  • 1を入力してreturn
We were unable to find a vhost with a ServerName or Address of www.hi3103.net.
Which virtual host would you like to choose?
(note: conf files with multiple vhosts are not yet supported)
<hr>
1: ssl.conf                       |                       | HTTPS | Enabled
<hr>
Press 1 [enter] to confirm the selection (press 'c' to cancel):
  • 1を入力してreturn (wwwのぶん)
Waiting for verification...
Cleaning up challenges

We were unable to find a vhost with a ServerName or Address of hi3103.net.
Which virtual host would you like to choose?
(note: conf files with multiple vhosts are not yet supported)
<hr>
1: ssl.conf                       |                       | HTTPS | Enabled
<hr>
Press 1 [enter] to confirm the selection (press 'c' to cancel):
  • 1を入力してreturn
Deploying Certificate for hi3103.net to VirtualHost /etc/httpd/conf.d/ssl.conf

We were unable to find a vhost with a ServerName or Address of www.hi3103.net.
Which virtual host would you like to choose?
(note: conf files with multiple vhosts are not yet supported)
<hr>
1: ssl.conf                       | hi3103.net            | HTTPS | Enabled
<hr>
Press 1 [enter] to confirm the selection (press 'c' to cancel):
  • 1を入力してreturn (wwwのぶん)
Deploying Certificate for www.hi3103.net to VirtualHost /etc/httpd/conf.d/ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
<hr>
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
<hr>
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
  • httpからのアクセスをhttpsに強制リダイレクトするかしないか
    • 1(しない)にした(のちほど.htaccessで設定するため)
<hr>
Congratulations! You have successfully enabled https://hi3103.net and
<a href="https://www.hi3103.net">https://www.hi3103.net</a>

You should test your configuration at:
<a href="https://www.ssllabs.com/ssltest/analyze.html?d=hi3103.net">https://www.ssllabs.com/ssltest/analyze.html?d=hi3103.net</a>
<a href="https://www.ssllabs.com/ssltest/analyze.html?d=www.hi3103.net">https://www.ssllabs.com/ssltest/analyze.html?d=www.hi3103.net</a>
<hr>

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/hi3103.net/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/hi3103.net/privkey.pem
   Your cert will expire on 2018-02-16. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. 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
  • 完了。apacheを再起動して適用する。
# systemctl restart httpd

参考URL