Frage

Ich habe kürzlich ein Problem mit Windows 2003 (anscheinend es existiert auch in anderen Versionen auch), wo, wenn eine SSL / TLS-Server-Client-Zertifikat Authentifizierung anfordert und es hat mehr als 16 KB vertrauenswürdigen Zertifikat DNs, Internet Explorer (oder jede andere Anwendung, die schannel.dll verwendet) ist nicht in der Lage, den SSL-Handshake abzuschließen. (Auf den Punkt gebracht, bricht der Server die Nachricht in Stücke von 2 ^ 14 Bytes, gemäß RFC 2246 sec. 6.2.1, aber Schannel wurde geschrieben, das nicht zu unterstützen. Ich habe bekommen eine Bestätigung von Microsoft Support, dass dies eine ist Fehler in Schannel und dass sie in Anbetracht es in einer zukünftigen Version zu befestigen.)

Also ich versuche, einen Weg finden, um bequem durch meine vertrauenswürdigen Zertifikate zu analysieren (ich benutze Apache wie mein Server, so dass alle von ihnen sind im PEM-Format), um die Gesamt ASN.1-Format Länge der DNs zu erhalten ( das ist, wie sie über den Draht während des Handshake gesendet werden), und damit sehen, ob ich zu nahe an die Grenze zu bekommen. Ich habe noch nicht gelungen, einen Weg zu finden, dies zu tun, aber: die OpenSSL asn1parse Funktion nahe kommt, aber es scheint nicht, einen Weg, um die ASN.1-Sequenz für nur den Namen des Emittenten zu erhalten, die, was ist ich brauche.

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Da ASN.1 Selbst beschreiben, es ist ziemlich einfach, einen ASN.1-Parser zu schreiben. Wie Sie wahrscheinlich wissen, enthält ASN.1 Daten einen Baum von Werten, wobei jeder Wert Typ durch einen global zugewiesen OID (Objekt-ID) identifiziert wird. Sie können einen kostenlosen ASN.1-Decoder mit Quellcode finden Sie unter: http://www.geocities.co.jp/SiliconValley- San Jose / 3377 / asn1JS.html . Es;. 'S in Javascript geschrieben, so dass Sie mit ihm direkt in Ihrem Browser spielen können

Wie genau auf Ihre Frage - ich würde:

  1. Verwenden Sie den mitgelieferten Parser, ein anderes finden oder schreibe meine eigenen
  2. Finden Sie die OID vertrauenswürdiger DNs (die Spezifikation prüfen oder einfach ein Zertifikat entschlüsseln mit der mitgelieferten ASN.1-Decoder Seite)
  3. Kombinieren Sie die beiden oben die Größe der vertrauenswürdigen DNs in einem Zertifikat zu extrahieren.

Andere Tipps

openssl asn1parse wird es tun, aber Sie werden einige manuelle Parsen tun müssen, um herauszufinden, wo der Emittent Sequenz beginnt. Per RFC 5280, ist es das vierte Element in der tbsCertificate Sequenz (potentiell 3. wenn es sich um eine v1-Zertifikat), unmittelbar nach dem Signaturalgorithmus. Im folgende Beispiel:

    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

Issuer DN beginnt am Offset 31 und hat eine Kopflänge von zwei und einen Wert Länge von 64, für eine Gesamtlänge von 66 Bytes. Das ist nicht so einfach zu Skript, natürlich ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top