2009年02月28日

OpenSSL は桁が溢れる

openssl コマンドを使うと簡単に自己署名証明書が作れます
Extension をどうにかしようとすると設定ファイルを書かないといけませんが
$ openssl req -new -x509 -nodes
とすれば秘密鍵がファイルに保存されて証明書が PEM で標準出力に流れます
これだと 30 日有効な証明書が出るのですが
-days というオプションで有効日数を指定してやることもできます

試しに手元のパソコンで
$ openssl req -x509 -days 10553 -new -nodes | openssl x509 -noout -text
としてみたところ
Validity
    Not Before: Feb 27 17:44:15 2009 GMT
    Not After : Dec 14 11:15:59 1901 GMT
見事に 2038 年問題が発生しました
ASN.1 を parse してみたところ (作りなおしたので日付ずれますが)
112:d=3  hl=2 l=  13 prim: UTCTIME           :090227174633Z
127:d=3  hl=2 l=  15 prim: GENERALIZEDTIME   :19011214111817Z
notBefore と notAfter で型が違っていました
RFC 5280 には
CAs conforming to this profile MUST always encode certificate validity dates through the year 2049 as UTCTime
と書いてあるのに何故 GeneralizedTime が出てくるのでしょう?
2038 年でも UTCTime なはずなんだけど
試しに 64bit な CPU で同じことをしてみたところ
111:d=3  hl=2 l=  13 prim: UTCTIME           :090227182337Z
126:d=3  hl=2 l=  13 prim: UTCTIME           :380119182337Z
溢れずに UTCTime で出てきました
ん〜手元に解凍してあった openssl-0.9.8j を grep してみたら crypto/o_time.c に
/* Turn the number of seconds since January 1st 1970 to
   an internal delta time.
   Note that lib$cvt_to_internal_time() will assume
   that t is signed, and will therefore break on 32-bit
   systems some time in 2038.
*/
と書いてありました。
BIGNUM とか使ったらいいんじゃないの?
っていうのは素人考えなんでしょうか。
影響範囲が大きいのかなぁ。
posted by OJH at 03:27| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。