Question

J'ai récemment rencontré un problème avec Windows 2003 (apparemment, il existe également dans d'autres versions). Si un serveur SSL / TLS demande l'authentification du certificat client et qu'il possède plus de 16 Ko de DN de certificat sécurisés, Internet Explorer (ou toute autre application qui utilise schannel.dll) est incapable de terminer la négociation SSL. (En résumé, le serveur divise le message en blocs de 2 ^ 14 octets, conformément à la RFC 2246 sec. 6.2.1, mais Schannel n’a pas été écrit pour supporter cela. Le support technique de Microsoft a confirmé qu’il s’agissait là d'une défaut dans Schannel et qu’ils envisagent de le réparer dans une version ultérieure.)

J'essaie donc de trouver un moyen d'analyser facilement mes certificats de confiance (j'utilise Apache comme serveur; ils sont donc tous au format PEM) pour obtenir la longueur totale en format ASN.1 des DN. c'est comment ils sont envoyés sur le fil pendant la poignée de main), et ainsi voir si je m'approche trop de la limite. Cependant, je n'ai pas encore trouvé le moyen de le faire: la fonction OpenSSL asn1parse se rapproche, mais elle ne semble pas fournir de moyen d'obtenir la séquence ASN.1 uniquement pour le nom de l'émetteur, ce qui est ce qui suit. J'ai besoin.

Des suggestions?

Était-ce utile?

La solution

Etant donné que ASN.1 est auto-descriptif, il est assez facile d’écrire un analyseur syntaxique ASN.1. Comme vous le savez probablement, les données ASN.1 contiennent une arborescence de valeurs, où chaque type de valeur est identifié par un OID attribué globalement. Vous pouvez trouver un décodeur ASN.1 gratuit avec le code source à l'adresse: http://www.geocities.co.jp/SiliconValley- SanJose / 3377 / asn1JS.html . Il est écrit en javascript pour que vous puissiez jouer directement dans votre navigateur.

En ce qui concerne votre question exacte - je voudrais:

  1. Utilisez l'analyseur fourni, trouvez-en un autre ou écrivez le mien
  2. Recherchez l'OID du nom distinctif (vérifiez la spécification ou décodez simplement un certificat à l'aide de la page de décodeur ASN.1 fournie)
  3. Combinez les deux opérations ci-dessus pour extraire la taille des noms distinctifs approuvés dans un certificat.

Autres conseils

openssl asn1parse le fera, mais vous devrez effectuer une analyse manuelle pour déterminer le début de la séquence de l'émetteur. Conformément à la RFC 5280, il s'agit du quatrième élément de la séquence TBSCertificate (potentiellement le troisième s'il s'agit d'un certificat v1), immédiatement après l'algorithme de signature. Dans l'exemple suivant:

    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

le nom distinctif de l'émetteur commence au décalage 31 et a une longueur d'en-tête de deux et une longueur de valeur de 64, pour une longueur totale de 66 octets. Ce n'est pas si facile à script, bien sûr ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top