2010-03-29に、OpenSSLのVersion 1.0.0がリリースされました。
この記事では、Version 0.9.8からの変更点をまとめてみたいと思います。
OpenSSLプロジェクトでは、各種OSディストリビューションに広く添付されているVersion 0.9.8のメンテナンスと並行し、Version 1.0.0の開発が進められていました。昨年のエイプリルフール、2009-04-01に最初のβ1版がリリースされ、1年かけてβ5版までリリースされた後、今回最初の正式版がリリースされたことになります。
以下、Version 1.0.0のソースコードに添付されているCHANGESファイルから、Version 0.9.8n→Version 1.0.0での大きな変更点を抜き出してまとめました。OpenSSLプロジェクトウェブサイトのChangeLogとしても参照できます。
機能追加・変更
- OpenSSL内部で使っている、X.509証明書の"hash"値が変更になりました。OpenSSLでは証明書検証の際、信頼する証明書ファイル、CRLファイルを入れておくディレクトリを用意し、添付されているc_rehashコマンドで初期化しておく必要があるのですが、そのコマンドが利用するのがこの"hash"値です。結果として、Version 0.9.8で利用していた証明書検証用ディレクトリは、Version 1.0.0でそのままでは利用できず、再度c_rehashコマンドで初期化し直す必要があります。
- X.509証明書の2038年問題への対応が行われました。従来はOSの時刻処理C関数を利用していたため、2038年より後の有効期限を持つ証明書を発行すると、有効期限が1900年代になってしまっていたのですが、仕様に従った証明書が作成できるようになっています。。。のはずなのですが、未検証のため、今後検証したいと思います。
- RFC3850、RFC3851、RFC3852で定義されているCMSサポートが追加されました。opensslコマンドにも、cmsユーティリティーが追加されています。概ねsmimeユーティリティー(PKCS#7用)と同じ使い勝手です。
- RFC3161で定義されているタイムスタンプサポートが追加されました。opensslコマンドにも、tsユーティリティーが追加されています。タイムスタンプリクエストデータを生成したり、リクエストに対してタイムスタンプを生成したり、検証したりできますが、SSLのようにサーバーやクライアント実装が含まれているわけではなく、データフォーマットとしてのサポートです。また残念ながら、日本のタイムスタンプサービスで利用されている時刻監査証明書には非対応のはずです(念のため、再度検証予定です)。
- X.509証明書検証に利用するCRLとして、各種形式のサポートが追加されました; デルタCRL(Delta CRL)、区分CRL(Partitioned CRL)、間接的CRL(Indirect CRL)、CRL拡張。
- X.509証明書検証に利用する証明書拡張として、以下のサポートが追加されました; ポリシーマッピング、名前制約(Name Constraints)
- X.509証明書検証に利用するCRLファイルの、動的読み込み機能が追加されました。これが使い物になれば、影響範囲は大きいですね。
SSL/TLS関連
- デフォルトでSSLv2を利用しないようになりました。
- RFC4279で定義されている、PSK TLS(事前鍵共有に基づくTLS)をサポートしました。
- SSL ciphersの指定方法が簡略化されました。内部の決定アルゴリズムも変更されています。"DEFAULT"を指定した場合の設定に変更はないようにしているように見えますが、複雑かつトリッキーな指定で利用しているユーザーは、Version 0.9.8との互換性に注意してください。EC + DHのアルゴリズム指定文字列も変更になっています。
アルゴリズム
- デフォルトでCamelliaアルゴリズムが利用可能になりました。
- ECDSA署名で、SHA2を利用した署名をサポートしました。
- DSA署名で、SHA2を利用した署名をサポートしました。
- Whirlpoolハッシュアルゴリズムをサポートしました。
- GOSTアルゴリズムがサポートされました。engineとしての実装です。不勉強で初耳でしたが、ロシアで標準化されているもののようです。
その他
CHANGESファイルの「Changes between 0.9.8n and 1.0.0」セクションには、100を超える変更点が列挙されています。上記で上げた以外に、API関連の変更だけで60以上記載されていますので、OpenSSLを利用した開発を行っている場合は個別に確認してください。CRYPTO_*、EVP_*、X509_*系APIの追加、変更以外に、STACK、LHASHなどの汎用データ型用マクロのクリーンアップ(変更)が含まれています。
本記事では、OpenSSL Version 1.0.0の変更点について、CHANGESファイルの記載を元にまとめました。今後は個別の変更点について、実際の挙動を試した結果をまとめていく予定です。
なお特に明示的な宣言はありませんが、各種状況から見て、Version 0.9.8のメンテナンスは続いていくはずです。現時点で、Version 1.0.0をいち早く(β版の段階から)採用している主要なOSディストリビューションはFedora 12のみですが、Version 0.9.8とVersion 1.0.0で非互換なAPI変更もそれほど大きくないため、Fedora 12での実地経験を参考に、各ディストリビューションで少しずつ移行が進んでいくものと思います。



コメント