Pregunta

Recientemente me encontré con un problema con Windows 2003 (al parecer también existe en otras versiones), donde si un SSL/TLS servidor solicita la autenticación de certificado de cliente y cuenta con más de 16 KB de un certificado de confianza de DNs, Internet Explorer (o cualquier otra aplicación que utiliza schannel.dll) es incapaz de completar el protocolo de enlace SSL.(En pocas palabras, el servidor se descompone el mensaje en trozos de 2^14 bytes, como por RFC 2246 sec.6.2.1, pero Schannel no fue escrita para apoyar eso.He recibido la confirmación de soporte técnico de Microsoft que este es un fallo en Schannel y que están considerando la posibilidad de fijarlo en una versión futura.)

Así que estoy tratando de encontrar una manera de analizar con facilidad a través de mis certificados de confianza (yo uso de Apache como mi servidor, por lo que todos ellos están en formato PEM) para obtener el total de la ASN.1-el formato de la longitud de los DNs (que es como se los envía a través del cable durante el apretón de manos), y por lo tanto a ver si me estoy poniendo demasiado cerca del límite.Todavía no he sido capaz de encontrar una manera de hacer esto, sin embargo:el OpenSSL asn1parse función viene cerca, pero no parece proporcionar una forma para obtener la ASN.1 secuencia de sólo el nombre de emisor, que es lo que necesito.

Alguna sugerencia?

¿Fue útil?

Solución

Desde ASN.1 se auto describe, es bastante fácil escribir un ASN.1 analizador.Como usted probablemente sabe, la ASN.1 datos contiene un árbol de valores, donde cada tipo de valor es identificado por un global asignado OID (IDENTIFICADOR de Objeto).Usted puede encontrar libre de la ASN.1 decodificador con código fuente en: http://www.geocities.co.jp/SiliconValley-SanJose/3377/asn1JS.html.Es;'s escrito en javascript, así que puedes jugar directamente en tu navegador.

En cuanto a tu pregunta exacta - me gustaría:

  1. Utilice el cable analizador, a encontrar otro o escribir mi propio
  2. Encontrar el OID de confianza DNs (verificación de la especificación o simplemente decodificar un certificado utilice el adaptador de ASN.1 decodificador de la página)
  3. Combinar los dos de arriba para extraer el tamaño de la confianza de DNs en el interior de un certificado.

Otros consejos

openssl asn1parse va a hacer, pero tendrás que hacer algún manual de análisis para averiguar si el emisor de la secuencia comienza.Por RFC 5280, es la 4ª elemento en la TBSCertificate secuencia (potencialmente 3º si es una v1 certificado), inmediatamente después de la firma del algoritmo.En el siguiente ejemplo:

    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

el Emisor DN comienza en el desplazamiento 31 y tiene una cabecera de longitud de dos y un valor de longitud de 64, para una longitud total de 66 bytes.Esto no es tan fácil de secuencia de comandos, por supuesto...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top