2

最近、Windows 2003 で問題に遭遇しました (どうやら他のバージョンにも存在するようです)。SSL/TLS サーバーがクライアント証明書認証を要求していて、信頼できる証明書 DN が 16KB を超えている場合、Internet Explorer (または他のアプリ) schannel.dll を使用する) は、SSL ハンドシェイクを完了できません。(簡単に言えば、RFC 2246 秒 6.2.1 に従って、サーバーはメッセージを 2^14 バイトのチャンクに分割しますが、Schannel はそれをサポートするように作成されていません。マイクロソフトのサポートから、これがSchannel の欠陥であり、将来のリリースで修正することを検討しているとのことです。)

そのため、信頼できる証明書を簡単に解析して(サーバーとしてApacheを使用しているため、すべてPEM形式です)、DNのASN.1形式の合計長を取得する方法を見つけようとしています(これが方法ですそれらはハンドシェイク中にネットワーク経由で送信されます)、それにより、制限に近づきすぎていないかどうかを確認します。私はまだこれを行う方法を見つけることができませんでした.私は欲しい。

助言がありますか?

4

2 に答える 2

3

ASN.1 は自己記述型であるため、ASN.1 パーサーを作成するのはかなり簡単です。ご存じのとおり、ASN.1 データには値のツリーが含まれており、各値の型はグローバルに割り当てられた OID (オブジェクト ID) によって識別されます。ソース コード付きの無料の ASN.1 デコーダは、次の場所にあります。http://www.geocities.co.jp/SiliconValley-SanJose/3377/asn1JS.html . JavaScript で書かれているので、ブラウザで直接操作できます。

あなたの正確な質問について-私は:

  1. 提供されたパーサーを使用するか、別のパーサーを見つけるか、独自のパーサーを記述します
  2. 信頼できる DN の OID を検索します (仕様を確認するか、提供されている ASN.1 デコーダー ページを使用して証明書をデコードします)。
  3. 上記の 2 つを組み合わせて、証明書内の信頼できる DN のサイズを抽出します。
于 2008-09-17T19:30:18.700 に答える
0

openssl asn1parse がそれを行いますが、発行者シーケンスがどこから始まるかを把握するために手動で解析を行う必要があります。RFC 5280 によると、これは TBSCertificate シーケンスの 4 番目の項目であり (v1 証明書の場合は 3 番目になる可能性があります)、署名アルゴリズムの直後です。次の例では:

    0:d=0  hl=4 l= 621 cons: SEQUENCE
    4:d=1  hl=4 l= 470 cons:  SEQUENCE
    8:d=2  hl=2 l=   3 cons:   cont [ 0 ]
   10:d=3  hl=2 l=   1 prim:    INTEGER           :02
   13:d=2  hl=2 l=   1 prim:   INTEGER           :02
   16:d=2  hl=2 l=  13 cons:   SEQUENCE
   18:d=3  hl=2 l=   9 prim:    OBJECT            :sha1WithRSAEncryption
   29:d=3  hl=2 l=   0 prim:    NULL
   31:d=2  hl=2 l=  64 cons:   SEQUENCE
   33:d=3  hl=2 l=  11 cons:    SET
   35:d=4  hl=2 l=   9 cons:     SEQUENCE
   37:d=5  hl=2 l=   3 prim:      OBJECT            :countryName
   42:d=5  hl=2 l=   2 prim:      PRINTABLESTRING   :US
   46:d=3  hl=2 l=  26 cons:    SET
   48:d=4  hl=2 l=  24 cons:     SEQUENCE
   50:d=5  hl=2 l=   3 prim:      OBJECT            :organizationName
   55:d=5  hl=2 l=  17 prim:      PRINTABLESTRING   :Test Certificates
   74:d=3  hl=2 l=  21 cons:    SET
   76:d=4  hl=2 l=  19 cons:     SEQUENCE
   78:d=5  hl=2 l=   3 prim:      OBJECT            :commonName
   83:d=5  hl=2 l=  12 prim:      PRINTABLESTRING   :Trust Anchor
   97:d=2  hl=2 l=  30 cons:   SEQUENCE
   99:d=3  hl=2 l=  13 prim:    UTCTIME           :010419145720Z
  114:d=3  hl=2 l=  13 prim:    UTCTIME           :110419145720Z
  129:d=2  hl=2 l=  59 cons:   SEQUENCE

発行者 DN はオフセット 31 から始まり、ヘッダー長は 2、値の長さは 64、合計長は 66 バイトです。もちろん、これをスクリプト化するのはそれほど簡単ではありません...

于 2008-10-09T20:38:45.360 に答える