スポンサーリンク

let’sencryptでの諸問題解決

letsencryptでいろいろ設定にはまったのでメモしておく。

CentOS6系
httpサーバーはApache2.2系

問題1
wwwあり、wwwなし問題とServerAlias設定時のletsencryptで生成される設定について
問題2
letsencryptで勝手にSSL接続しに行く

問題1.WWWありなし問題とServerAlias

まずはWWWありなし問題について
最近はサブドメインにWWWをつけないのが主流だと思いますが、過去の経緯で付けてしまって今更外せないよってこともあるかと思います。
WWWを付けた場合、当然つけてないほうも同じように見れる、もしくはWWW付きに転送するのが普通かと思います。
どちらにせよ、両方設定を書くのは面倒なのでServerAliasで指定するかと思います。
letsencryptのCertbot クライアントで証明書を発行した場合、HTTPの設定をコピーしてSSL用の設定も書いてくれます。
ですが、これが曲者でServerAliasまでコピーするにもかかわらず、ServerAliasで設定したドメインの分まで証明書を発行してくれません。

一応、クライアント起動時にパラメータを書けばドメインの複数設定も可能ですが、特に問題はないと思うので別々にとっても良いかと思います。

さらに問題を複雑にするのはドメイン名=サーバー名だった場合。
通常はヴァーチャルホストで設定、つまり/etc/httpd/conf.d/*.conf で記載すると思いますが、 ドメイン名=サーバー名の場合は共通設定の/etc/httpd/conf/httpd.confが使われます。なのでヴァーチャルホストに設定を書いても有効になりません。

letsencryptで勝手にSSL接続しに行く

次にletsencryptで勝手にSSL接続しに行く問題。
httpできた場合、httpsに転送する設定はよくやると思いますが、実は証明書でもこの設定ができるのです。
HSTSという機能です。

Certbot クライアントで証明書を発行するときに

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.

という質問があったと思いますが、これで2を選ぶと自動転送する設定になります。
ただし!一回httpsで接続した履歴がある場合のみ有効です。
初めて来た場合でhttpで接続した場合は転送されません。

サーバーやアプリでhttpsへの転送を設定した場合で、そのテストをする場合。
実は証明書の機能で転送していて、本当はサーバー側の設定がちゃんとできていなかったって言うことになりかねません。気を付けましょう。

正直、この設定はしないほうが良いかと思います。トラブルの素です。結局のところ、初回アクセス時のためにサーバー側で転送設定しなければならないのは変わらないのであまり意味がありません。

ちなみに、この設定はブラウザに保存されますので、削除が可能です。
choromeの場合は以下にアクセスして
chrome://net-internals/#hsts
Delete domainという項目のフォームでドメイン名を指定して削除が可能です。

letsencryptで証明書の再発行

この設定をやめたいという場合は証明書の再発行が必要です。

証明書の失効作業は以下のようにして行えます。

# ./certbot-auto revoke –cert-path=/etc/letsencrypt/archive/example.com/cert1.pem
# ./certbot-auto revoke –cert-path=/etc/letsencrypt/archive/example.com/fullchain1.pem
また秘密鍵を失効させる場合は –key-path で指定します。
証明書の削除は
# ./certbot-auto delete -d example.com
とすると、メニューにドメイン一覧がでますので選択します。

そのあとHTTPDの設定でSSLに関するものをいったん削除して再起動します。

また、この後新しい証明書を発行しなおす場合は、いったんhttpで接続可能な状態にしなければなりません。
サーバー設定でhttpsへの転送設定をしている場合は、いったん外しましょう。

後は通常の手順で発行手続きをすれば問題ないはずです。
手続き終了後、certbot-autoで出力された設定を修正すれば完了です。

サーバーを再起動後はちゃんと設定が有効になっていることを確認しましょう

https://www.ssllabs.com/ssltest/analyze.html?d=(ドメイン名)&latest

再発行の場合、ちゃんと発行日が今日になっているのをチェックしましょう。

また、設定のリロードだけではなく、最終的には、できればサーバー自体再起動したほうが良いでしょう。
再起動したら動かなくなったってこともまれにありますので。