SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|07|08|09|10|11|12|
2026|01|02|03|

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日なんだろう。なんにせよ、更新せねばなるまい。

  新しく認証局から作る機会は多いが、更新する機会ってあまりない。いい機会なので、落ち着いて更新手順を確立しよう……と、思っていたらアレコレやることがあって、一週間近く放置してしまった。

  まずは、認証局証明書の期限を確認する。こっちは10年間で作られていて、2033年まで有効なので、これはそのままでいいだろう。

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

  サーバ証明書の825日は伸ばそう。証明書の作成にはEasy-RSAを使っているのだが、どうもeasyrsaのスクリプトを直接書き換えればいいようだ。10年に伸ばす。

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をディレクトリごとバックアップしているであろうが、まぁ再度必要になることはない。

  対応する鍵の方はpki/privateの下だが、これは変化しないのでそのままでいい。

darius.itline.jp: /etc/openvpn/server # cp easy-rsa/pki/issued/darius.itline.jp.crt .

  なので、証明書だけ新しいものに上書きする。んが、それだけではサーバが提示する証明書は古いままだ。OpenVPNを再起動する必要がある。

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

  あとは、サーバ側で作った新しい証明書をクライアント側に持ってきてOpenVPNを再起動すればいい。

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を観戦。中盤、物議を醸すベアマンの大クラッシュ。奇しくも、ピットウォークの後に現地で実際に少し触れたコース脇の距離看板(場所は違うけど)を粉砕していた。そうか。そりゃ、こういうことがあるからコンクリートで作るわけがないよなぁ。納得。

  画像の説明 画像の説明