2010年04月02日

OpenSSL-1.0.0 でのハッシュリンク使用は要注意

はてなブックマークに登録

先日(03/29)、OpenSSL のメジャーバージョンアップ版 1.0.0 がリリースされました。 ちょうど1年ほど前から beta リリースが出ていましたが、ついに正式にリリースとなりました。
早速ソースコードをダウンロードして試してみたところ、気になるところを見つけたので記事にします。

サブジェクトのハッシュ

OpenSSLには、証明書や CRL に含まれるサブジェクトや発行者名を 8文字で表現されるハッシュ値に変換する機能があります。
このハッシュ値は、OpenSSL のコマンドラインや SSL/TLS の実装として OpenSSL をリンクしているアプリケーションに対して、個々の CA証明書や CRL のファイルをディレクトリごと指定する際にファイル名として使用します。

 $ openssl x509 -noout -hash -in hoge.pem

このようなコマンドラインで、サブジェクト名に対するハッシュ値が計算できます。
得られたハッシュ値を元に「 1a2b3c4d.0 (ハッシュ値が衝突した場合は 1a2b3c4d.1、1a2b3c4d.2 と連番をふる)」といったファイル名で証明書を保存して使います。

しかし、実際のファイル名がハッシュ値だと、ファイル名のみから元の証明書を見分けるのは難しいので、わかりやすいファイル名を付けた元ファイルに対するシンボリックリンク(ハッシュリンク)として作成しておく場合も多いと思います。
(ちなみに、このハッシュリンクを一気に簡単に作る補助スクリプトとして c_rehash という Perlスクリプトが添付されています。)

1.0.0 からハッシュアルゴリズムが変更に

このハッシュリンクを作成したディレクトリ、OpenSSLのバージョンを更新する際でも再作成せずにそのまま使用される方も多いと思いますが、OpenSSL-1.0.0 からは再作成したほうがよさそうです。
公式サイトのアナウンスで出ている主な変更点リストを見てもわからないのですが、ハッシュ計算のアルゴリズムが変更になっています。

例えば、こんな感じで 0.9.8系までと 1.0.0系で違うハッシュ値が計算されています。

 $ openssl x509 -noout -subject -in equifax.pem
 subject= /C=US/O=Equifax/OU=Equifax Secure Certificate Authority
 
 $ /usr/bin/openssl version
 OpenSSL 0.9.8k 25 Mar 2009
 $ /usr/bin/openssl x509 -noout -hash -in equifax.pem
 594f1775
 
 $ /opt/openssl-1.0.0/bin/openssl version
 OpenSSL 1.0.0 29 Mar 2010
 $ /opt/openssl-1.0.0/bin/openssl x509 -noout -hash -in equifax.pem
 578d5c04

具体的には、旧アルゴリズムでは MD5ハッシュを元にして計算していたものが、SHA1ハッシュを元にしたものに変更されています。
OpenSSLのコマンドラインオプションでは、-subject_hash、-issuer_hash ともに新アルゴリズムを使用するものになっていて、旧アルゴリズムを使用する場合にはそれぞれ -subject_hash_old と -issuer_hash_old を使用するようになっています。
-hash を指定した場合には新アルゴリズムを使う -subject_hash が呼ばれます。
OpenSSLコマンドライン内部で実際に呼ばれているライブラリの関数名も X509_subject_name_hash と X509_issuer_name_hash に対して X509_subject_name_hash_old と X509_issuer_name_hash_old が定義されているようです。

最後に

私も、まさかハッシュ計算アルゴリズムが変更になることはないだろうと思い、0.9.8ベースで作ったハッシュリンクを 1.0.0 で使おうとして、verifyが通らずにハマりました。
メジャーバージョンアップ時には、面白い機能の追加や改良以外にも、今まであった機能への変更点についても注意しないといけないですね。


#dSn
klab_gijutsu2 at 17:19│Comments(0)TrackBack(0)network 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント