SVX日記
2026-03-29(Sun) OVER THE 証明書 TROUBLE
自宅の環境では、OpenVPNを使って、さくらのVPSと繋いでいる。こん時とは違う構成だが、基本は同じだ。VPNで繋ぐことにより、VPS間のすべての通信が暗号化され、VPSがLAN内に位置する扱いになる。なので、NFSも安心して使うことができる。NFSなんてトラブルの素なので絶対に使わないけれど。
外向けにSSHポートを開放すると、ブルートフォース攻撃がとてもウルサい。非対称鍵で守っていれば完全に安全ではあるが、ログがウルサい状況は避けられない。なので普段はVPNを通してSSHを使い、外向けには閉じておく。でも、たまには外から使いたいので、以前にHTTP経由でSSHを開く仕組みを作った。これは便利に使えているが、VPNのおかげで滅多に使う機会はないのであった。
ところがある日、ネットが不通になった。あわてて状況を調べると、ダメなのはOpenVPNだけだ。自分の場合、スマホ経由で自分で作ったサービスを使いまくっているので、すぐに気づいた。OpenVPNのサーバ側、クライアント側のログを見ると、確かにトラブっている。なになに……
3月 22 00:59:07 zoshi.itline.jp openvpn[1465]: VERIFY OK: depth=1, CN=Itline CA
3月 22 00:59:07 zoshi.itline.jp openvpn[1465]: VERIFY ERROR: depth=0, error=certificate has expired: CN=darius.itline.jp, serial=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3月 22 00:59:07 zoshi.itline.jp openvpn[1465]: OpenSSL: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed
クライアント側に「certificate has expired」と出ていた。あ。全日空……じゃなくて、証明書の期限切れね。でも、証明書の期限って、10年とかに変えてなかったっけ? と、思って調べたらデフォルトの825日だった。2年チョイ?なんで825日なんだろう。なんにせよ、更新せねばなるまい。
darius.itline.jp: /etc/openvpn/server # openssl x509 -in ca.crt -text
Certificate:
Data:
Validity
Not Before: Dec 17 15:43:04 2023 GMT
Not After : Dec 14 15:43:04 2033 GMT
darius.itline.jp: /etc/openvpn/server/easy-rsa # diff easyrsa.org easyrsa
< set_var EASYRSA_CERT_EXPIRE 825
> set_var EASYRSA_CERT_EXPIRE 3650
darius.itline.jp: /etc/openvpn/server/easy-rsa # ./easyrsa build-server-full darius.itline.jp
darius.itline.jp: /etc/openvpn/server/easy-rsa # ./easyrsa renew darius.itline.jp
Enter pass phrase for /usr/share/easy-rsa/3.1.7/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'darius.itline.jp'
Certificate is to be certified until Mar 26 02:13:08 2036 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
で、新たに10年有効な証明書が発行された。証明書はpki/issuedの下に出力されているが、古いのは上書きされている。賢明な諸兄なら/usr/share/easy-rsa/3.x.xをディレクトリごとバックアップしているであろうが、まぁ再度必要になることはない。
darius.itline.jp: /etc/openvpn/server # cp easy-rsa/pki/issued/darius.itline.jp.crt .
darius.itline.jp: /etc/openvpn/server # systemctl restart openvpn-server@main.service
これでクライアント側からの接続は成功するようになるが、クライアント側の証明書も切れているので、今度はサーバ側でエラーになってしまう。クライアント側の証明書もサーバ側で生成しているので、同様に以下で更新する。
darius.itline.jp: /etc/openvpn/server/easy-rsa # ./easyrsa renew zoshi.itline.jp
zoshi.itline.jp: /etc/openvpn/client # scp root@darius:/etc/openvpn/server/easy-rsa/pki/issued/zoshi.itline.jp.crt .
zoshi.itline.jp: /etc/openvpn/client # systemctl restart openvpn-client@darius.service
しかしね、証明書の有効期限という概念はどうかと思うよ。証明書を発行するという商売を成立させるために必要だったから、というのがその主な理由だと思っているが、その日まではまったく問題なく動作するのに、その日を境にまったく動作しなくなる。時限爆弾のようなもんじゃないか。それもある意味「故意に」だよね。せめて、猶予期間を設けて、その間はウォーニングログを吐きまくるとか、徐々にエラーの確率が増えていくとか、そういう実装が必要だったんではないかなぁ。
午後はテレビで鈴鹿のF1を観戦。中盤、物議を醸すベアマンの大クラッシュ。奇しくも、ピットウォークの後に現地で実際に少し触れたコース脇の距離看板(場所は違うけど)を粉砕していた。そうか。そりゃ、こういうことがあるからコンクリートで作るわけがないよなぁ。納得。


