2008-09-16 9 views
2

私は最近、SSL/TLSサーバーがクライアント証明書認証を要求していて、それに16 KB以上の信頼できる証明書DN、Internet Explorer(またはそれ以上のもの)がある場合、Windows 2003の問題に直面しました(他のバージョンにもあります) schannel.dllを使用する他のアプリケーション)はSSLハンドシェイクを完了できません。 (要約すると、サーバは、RFC 2246秒6.2.1に従って、メッセージを2^14バイトのチャンクに分割するが、Schannelはそれをサポートするよう書かれていない。私が信頼できる証明書を簡単に解析する方法を見つけようとしています(私はApacheを私のサーバとして使用しているので、それらのすべてが次のようになります)。 PEM形式で)、DNの合計ASN.1形式の長さ(ハンドシェイク中にワイヤを介してどのように送信されるか)を取得し、限界に近づきすぎているかどうかを確認します。私はまだこれを行う方法を見つけることができませんでした:OpenSSLのasn1parse関数は近づきますが、発行者の名前だけのASN.1シーケンスを取得する方法を提供していないようです私は欲しい。ASN.1 PEMファイルの発行者文字列を取得するには?

提案がありますか?

+0

これはプログラミング上の質問ではないので、投票される可能性があります。 – JasonMichael

+0

もちろん、それはプログラミングの質問です! –

答えて

3

ASN.1は自己説明的なので、ASN.1パーサーを書くのはかなり簡単です。ご存じのように、ASN.1データには値のツリーがあり、各値の型はグローバルに割り当てられたOID(オブジェクトID)によって識別されます。無料のASN.1デコーダは、ソースコードでhttp://www.geocities.co.jp/SiliconValley-SanJose/3377/asn1JS.htmlにあります。それはjavascriptで書かれているので、ブラウザで直接プレイすることができます。あなたの正確な質問に関しては

- 私はなります

  1. (仕様をみたり、使用して証明書を復号化し、付属のパーサーを使用して別のものを見つけるか、または信頼されたDNのOIDを探す
  2. 自分自身を書きます
  3. 上記の2つを組み合わせて、証明書内の信頼できるDNのサイズを抽出します。
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オフセット二つのヘッダ長と64の値の長さを有し、66バイトの長さの合計のために開始します。これはもちろんスクリプトでは簡単ではありません。

関連する問題