-
Si el servidor solicita el certificado durante el reconocimiento inicial, simplemente use Wireshark y busque el mensaje Certificate Request
TLS (justo antes de Server Hello Done
). Si observa los detalles de este paquete, debería ver una lista certificate_authorities
que le da la lista de CA aceptables. Su cadena local deberá coincidir con una de estas.
-
Si no hay un mensaje Certificate Request
visible, puede estar en un saludo negociado nuevamente. En este caso, este segundo saludo se cifrará, por lo que no será visible de inmediato. Las versiones recientes de Wireshark le permiten usar un secreto maestro previo (vea " Cómo usar la sección (Pre) -Master-Secret en la página wiki de Wireshark SSL , y esta respuesta por supuesto). Esto generalmente es más complicado. pero esto se puede hacer.
Más generalmente, para solucionar su problema, también vería otros NSS variables de entorno , como SSLDEBUG
(y SSLDEBUGFILE
), cuando se usa Firefox.
Además, podría usar openssl s_client -connect my.host.example:443 -servername my.host.example
(con varios niveles de verbosidad si es necesario) para simular una conexión de navegador a su servidor. Al menos debería decirle qué CA se anuncian en el mensaje Certificate Request
. Si el servidor utiliza la renegociación, es posible que deba escribir una solicitud HTTP mínima pareciéndose más o menos así (adaptado a lo que necesita):
GET /my/protected/resource HTTP/1.1
Host: my.host.example
(En algunas configuraciones complejas, es posible que tenga que copiar / pegar los otros encabezados que ve desde una solicitud del navegador, utilizando sus herramientas de desarrollo).
(También puede encontrar la opción -prexit
útil en algunos casos, acredite a esta respuesta .)
Como parece por los comentarios que la falsificación manual de la solicitud HTTP no funciona para usted, otra posibilidad es usar curl --verbose https://my.host.example/my/protected/resource > /dev/null
(también puede usar niveles de depuración más finos como --trace
o --trace-ascii
si es necesario, vea página de manual para curl). Esto debería producir algo como esto, así que espero que veas un Certificate Request
en alguna parte:
* SSLv3, TLS handshake, Client hello (1):
} [data not shown]
* SSLv3, TLS handshake, Server hello (2):
{ [data not shown]
* SSLv3, TLS handshake, CERT (11):
{ [data not shown]
* SSLv3, TLS handshake, Server key exchange (12):
{ [data not shown]
Mejor, si necesita que la solicitud sea más realista, realice su solicitud real desde Chrome después de abrir las herramientas para desarrolladores. Haga clic derecho en eso y use "Copiar como cURL", luego péguelo y utilícelo con curl (agregue --verbose
u otro): esto debería copiar los encabezados necesarios. Hay un video con un ejemplo aquí .