Domanda

Recentemente mi sono imbattuto in un problema con Windows 2003 (a quanto pare esiste anche in altre versioni), dove se un SSL/TLS server richiede l'autenticazione del certificato client e ha più di 16 kb di certificato attendibile DNs, Internet Explorer (o qualsiasi altra applicazione che utilizza schannel.dll) è in grado di completare l'handshake SSL.(In sintesi, il server si rompe il messaggio in blocchi di 2^14 byte, secondo la RFC 2246 sec.6.2.1, ma Schannel non è stata scritta per il supporto che.Ho ricevuto conferma dal supporto Microsoft che questo è un difetto in Schannel e che si sta valutando di fissaggio in una versione futura.)

Così sto cercando di trovare un modo per analizzare facilmente attraverso il mio certificati attendibili (io uso Apache come il mio server, in modo che tutti sono in formato PEM) per ottenere il totale ASN.1-formato di lunghezza del DNs (che è il modo in cui vengono inviati oltre il filo durante la stretta di mano), e, quindi, vedere se sono sempre troppo vicino al limite.Io non sono ancora stato in grado di trovare un modo per fare questo, però:OpenSSL asn1parse funzione si avvicina, ma non mi sembra quello di fornire un modo per ottenere l'ASN.1 sequenza solo per il nome dell'emittente, che è ciò di cui ho bisogno.

Qualche suggerimento?

È stato utile?

Soluzione

Dal ASN.1 è auto che descrive, è abbastanza facile scrivere un ASN.1 parser.Come probabilmente sapete, ASN.1 dati contiene un albero di valori, in cui ogni tipo di valore è identificata da un livello globale assegnato OID (Object ID).È possibile trovare un ASN.1 decoder con codice sorgente a: http://www.geocities.co.jp/SiliconValley-SanJose/3377/asn1JS.html.Si;'s scritto in javascript e ci si può giocare direttamente nel tuo browser.

Per la tua precisa domanda - vorrei:

  1. Utilizzare la dotazione parser, di trovarne un altro, o scrivere il mio
  2. Trovare l'OID di fiducia DNs (verificare le specifiche o semplicemente decodificare un certificato utilizzando il cavo fornito ASN.1 decoder pagina)
  3. Combinare i due sopra per estrarre la dimensione di fiducia DNs all'interno di un certificato.

Altri suggerimenti

openssl asn1parse di farlo, ma è necessario fare qualche manuale di analisi per capire dove l'emittente inizia la sequenza.Per RFC 5280, è il 4 ° elemento della TBSCertificate sequenza (potenzialmente 3 ° se è un v1 certificato), segue immediatamente l'algoritmo di firma.Nell'esempio riportato di seguito:

    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

l'Emittente DN inizia all'offset 31 e ha un header di lunghezza di due e un valore di lunghezza di 64 anni, per una lunghezza totale di 66 byte.Questo non è così semplice script, ovviamente...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top