Let’s Encrypt でTLS証明書を更新する。

Let’s Encrypt のTLS証明書を更新してみました。試した環境は以下です。

CentOS 6.10 + Apache 2.2.15

有効期限を確認します。ブラウザのURL入力欄の鍵マークをクリックし、ウェブサイトの識別情報で確認します。Firefoxの例です。※他のブラウザでもURLの鍵マークをクリックして証明書の内容を確認できると思います。

有効期限は、10/17です。前回の記事「Let’s EncryptでTLS化する(前編)」で Let’s Encrypt のインストールのときに使用した certbot-auto を使用します。作業は root ユーザで行います。certbot-auto があるディレクトリまで移動して、以下のコマンドを実行します。

# ./certbot-auto renew

※Let’s Encrypt では有効期限が30日未満になると更新ができます。それ以上あると更新されません。強制的に更新するオプションもあるので、有効期限が30日以上残っている場合で更新したいときは「certbot-auto renew --force-renew」とすることで更新できます(これは試していませんけれども・・)。

このとき、Apacheは起動したままにしておいてください。僕はApacheを一旦停止して「certbot-auto renew」を実行したため、一度更新に失敗しました。。。

[広告]

気を取り直して、、Apacheを起動して実行すると、以下の結果が表示されます。

念の為、Apacheを再起動します。また、ブラウザの表示もリフレッシュさせます(再読込、もしくは、F5キー押下)。ブラウザのウェブサイトの識別情報で有効期限が延長されたことを確認します。

これで、無事、TLS証明書の更新ができました!

ちなみに、、TLS証明書の更新により何が変更されたのかサーバーの設定ファイルを確認してみました。certbot-auto でTLS証明書をインストールしたときにはコンフィグファイルの書き換えを行っていましたが、更新のときは書き換えは行われていないようです(以下のファイルはいづれも変更はなし)。

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf/httpd-le-ssl.conf
/etc/letsencrypt/options-ssl-apache.conf

TLS証明書が格納されているディレクトリは、confファイルに以下のように定義されています(僕の場合は ssl.conf に記載しています)。

SSLCertificateFile /etc/letsencrypt/live/(サイトのサーバ名)/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/(サイトのサーバ名)/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/(サイトのサーバ名)/chain.pem

/etc/letsencrypt/live/(サイトのサーバ名) 配下には証明書が配置されていますが、これはシンボリックリンクとなっており、このリンクが更新されていました。リンク先は「/etc/letsencrypt/archive/(サイトのサーバ名)」です。

リンク先のほうのファイルを確認すると、新たに証明書が新規作成されていました(2018/09/22に作成されているものが該当)。証明書ファイルを新規作成し、リンク先を古いものから新しいものに切り替えることでコンフィグファイルの修正はなしとしているようです。

あと、やってみて気づいたのですが、有効期限が「10/17」だったものを更新したので「10/17」から3ヶ月延長されると思ったのですが、そうではなくて、実施日「9/22」から3ヶ月延長されたようです。

その後だけれど、「Let’s Encrypt Expiry Bot」という差出人から「Let’s Encrypt certificate expiration notice for domain “(サイトのドメイン名)”」というタイトルでメールが届きました。内容は、Let’s Encrypt で取得したTLS証明書の有効期限が近づいたので更新してください、というもの。すでに更新したのですれ違いになったようです。更新期限が近づくとメールでも案内していたんですね。そういえば、TLS証明書をインストールするときに連絡先のメールアドレスを設定したのを思い出しました。こういう連絡のときにメールアドレスが使われるのですね。。

以上。

WordPressでリビジョン削除後にMySQLのテーブルを最適化する。

前回の記事「WordPressのリビジョンを削除する。」でMySQLのテーブルからリビジョンのレコードを削除しました。頻繁にMySQLでテーブルのデータを削除しているので、最適化を実施してみます。データベースではデータ登録の際、未使用領域から使用していくためデータサイズが大きくなっていきます。データを削除してもまとまった「空き」がなければ未使用領域が使用されます。最適化を行うことで空き領域をまとめ、そこにデータが書き込まれるようになるためディスク領域の有効活用ができるようになります。また、データの断片化が解消されるためパフォーマンスも良くなります。

[広告]


前回と同様、最適化を行ったMySQLのバージョンは、5.7.23 です。

■OPTIMIZE TABLE テーブル名

最適化を行うMySQLの命令文は「OPTIMIZE TABLE テーブル名」です。WordPressの記事が書かれているテーブルは「wp_posts」テーブルであるため、このテーブルを最適化してみることにします。

mysql> OPTIMIZE TABLE wp_posts;

以下が実行結果です。

問題なく最適化できると思っていたのですが、どうやらこの結果ではダメっぽい。そもそも、statusが「Operation failed」となっているし。「Invalid default value for 'post_date'」というのが原因らしいけれど、さっぱり見当がつきません。
※'post_date'というのは、wp_postsテーブルが持つカラムの一つだけれど、それ以上のことは不明。。

しばらくわからなかったけれども、ある時以下の情報を見つけました。

MySQL 5.6.6 以降でのデフォルトのSQL モードは NO_ENGINE_SUBSTITUTION で、MySQL 5.6.5 以前では、これは空白です (モードの設定なし)。

で、以下をやってみた。

mysql> SET sql_mode = '';

その後、再度、OPTIMIZE TABLE を実行。

「Invalid default value for 'post_date'」が消え、statusが「OK」になりました!
これでテーブルの最適化ができたようです。