2009年9月19日

[Apache-Users 7438] Re:誤消去してしまった秘密鍵の復元

** Apache ユーザーズメーリングリスト **
** 注意:このメールへの返信は Apache-Users へ行きます **

鷹です。

結論ですが、ついに元の秘密鍵が見つかりました! 私のようなどんくさい人のた
めに、手順をメモしておきます。

1. サンプルの秘密鍵を4,5個生成する。

$ openssl genrsa -des3 2048 > test1.key
$ openssl rsa -outform der -in test1.key -out key1dec.bin

2. 1. で生成した秘密鍵をバイナリエディタで開く。私の場合、はじめの3バイ
トが毎回「30 82 04」になることが判明しました。

3. gdb の gcore で httpd のコアをダンプする。私の場合、約 4.76MB のファ
イルが生成されました。

# ps auxww|fgrep httpd
root 28944 0.0 0.7 24408 7968 ? Ss 17:40 0:00 /usr/sbin/httpd
apache 28946 0.0 0.4 24540 4392 ? S 17:40 0:00 /usr/sbin/httpd
:
# gdb
(gdb) attach 28944
(gdb) gcore httpd.core
(gdb) detach
(gdb) quit

4. バイナリエディタで、3. でダンプしたコアから、2. の秘密鍵のはじめの数
バイトを検索。何箇所か見つかるが、「/etc/httpd/modules/***.so」のよう
な文字列の数十バイト後にあり、まともな文字列を含まないものがたぶん本物。

5. 4. のコアから、秘密鍵と思われる部分を 1. で生成した秘密鍵+αくらいの
バイト数取り出す。

6. 5. のデータの長さを色々変えて、base64 encode し、公開鍵を使って検証す
る。私は PHP の base64_encode() や openssl_x509_check_private_key()
を使いました。

なお、コアの中で秘密鍵が格納されている位置は、同じ環境でも毎回違うような
感じでした。そのため「秘密鍵のはじめの数バイトは毎回同じ」でなかったら絶
望的だったと思います。

最後に、今回アドバイスを下さった皆様、本当にありがとうございました。今後
は厳重にバックアップを取ろうと心に誓いました。。

--------------------------------------
Thanks 10 years! Yahoo! Shopping and Yahoo! Auctions
http://pr.mail.yahoo.co.jp/ec10years/
--
入退会・変更・配送一時停止は以下へ
http://www.apache.jp/mailman/listinfo/apache-users


投稿者 xml-rpc : 2009年9月19日 19:07
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/88729
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。