サーバ復旧物語7:祝!CA局復旧
今回は以下に書いた大失敗をリカバリした話。ガンバったよ、ワタシ。
そもそも、CA局ってナニよ?というのが一般的だろう。ま、サーバ証明書とかを作る仕組みと思っておくれ。サーバ証明書もわからん人が大半だろうけど、こっちは暗号化通信するのに必要なデータだと思えば、まあまあ間違いない。(ホンマはもっといろいろあるんだけどね)
なので、サーバ証明書を発行するには、CA局(しーえーきょく)が要る、で、そのCA局を作るには、CA証明書がいる、で、そのCA証明書を作るには秘密鍵がいる。
というわけで、秘密鍵が残っていさえすれば、サーバ証明書は作れるのだ。
ちなみに、秘密鍵がなくてもCA局を作り直すのはできる。でもそのCA局は元のCA局とは違う新しいCA局にならざるを得ない。だから、同じCA局を復元したければ、元の秘密鍵が絶対に必要。(本当はそれに加えて証明書の発行履歴や無効化履歴も要るんだけど、ま、そこはあきらめることにする)
というわけで、何はともあれ秘密鍵の復元を試みることになる。これがうまくいかなければ、何もできないから。
さて、ここで問題が出てきた。
秘密鍵のデータは前回も書いたように、自ら抹殺してしまったので、この世に存在しない。残っているのは紙に印刷したデータなのだが、これが実に扱いづらいデータ形式だったのだ。
一般に秘密鍵はDER形式(バイナリ形式)かPEM形式で保存する。
DERはバイナリなので、そのまま印刷するのには全く向かない。それに比べてPEM形式はテキスト(Base64)形式なので、印刷も可能だ。
というわけで、手元の紙に残っているのは、PEM形式のデータだった。
これをデータに変換するしかないわけだが、誰もが思い付くように、ここはOCR(Optical Character Reader。要はデータから文字認識してくれるアプリ)を使うことだった。
幸い、MicrosoftのLensというアプリがOCR機能を持っているので、それで取り込んでみた。
おおむね変換できているので「よしよし」と思ったのもつかのま、重大な問題をはらんでいることに気付く。
上述のようにPEM形式はBase64でエンコードされているので、A-Z、a-z、0-9などの文字がランダムに並んている。ということは、O(オー)と0(ゼロ)、1とl(エルの小文字)とI(アイの大文字)がランダムに登場する。
しかし、OCRは紙の文書をデータ化するのを得意とするアプリだ。こんなランダム文字列を識別しろというのはあまりに酷な話だ。
結局、筆者が目を皿のようにして1文字づつ誤り修正をしていくという恐ろしくローテクな作業を強いられることになった。
これを700文字くらいやったんだけど、見てると目がチカチカしてきた。
さて、何とかこれを復元したつもりだが、ホントに正しいかどうかはわからない。
その検証のため、既存のCA証明書(これはデータとして別の場所に保管していた)を逆検証してみた。
これがOKだったら、同じ秘密鍵で作った証明書であることが証明できる。この検証過程もいろいろあったんだけど、何とか秘密鍵の復元はできた。
後は、なくなってしまった発行履歴などをそれっぽく整えて(実際には空の状態にした)CA局の復元が行えた。
今回の得た教訓はいくつかあった。
まず、PEM形式の紙出力は無謀だったという点。上述のようにOCRで読み取ろうにも文字が似すぎていて、めっちゃ大変だった。
対策は2つ。一つは印刷する時のフォントを工夫すればかなりマシにできる。具体的にはCourier系のフォント(タイプライターみたいなやつ)にしておく方法。
もう一つは、PEMではなくDER形式を16進数でダンプ出力しておくこと。これなら使う文字は0-9とA-Fの16種類だけだから、OCRでも読み間違えは少なくできる。
次の教訓は復元中に他の作業を行わないこと。
そもそも、前回の大失敗は復旧作業中にも関わらず、現行システムの改善作業に着手してしまったから起きた事故。
まずは、素直に復旧だけを行い、次のフェーズとして改善作業に入ればこんな失態を招かなかった。
要は、いらんことやって自滅するという、おバカをやったわけだ。
何はともあれ、CA局が復旧できたのはよかった。