如何使用cURL调试SSL握手?


70

我想对使用客户端证书的每个目录身份验证进行故障排除。我特别想找出服务器发送哪些可接受的客户端证书。

如何调试SSL握手,最好使用cURL?

提前致谢

Answers:


76

我已使用此命令对客户端证书协商进行故障排除:

openssl s_client -connect www.test.com:443 -prexit

如果服务器并不总是需要客户端证书,则输出可能包含“可接受的客户端证书CA名称”和来自服务器的CA证书列表,或者可能包含“未发送客户端证书CA名称”。


显然,“ openssl s_client ..”仅检查证书链,而不检查HTTP请求本身中的名称。与OpenSSL的喜欢,但卷曲并不一定证明我挣扎..
radiospiel

我将以上内容与之结合使用-showcerts,就像是魅力一样-谢谢!
Techmag

38
curl -iv https://your.domain.io

如果您不希望使用openssl命令,将为您提供cert和header输出。


6

curl可能确实有一些选项可以显示更多信息,但是对于这样的事情,我总是使用 openssl s_client

使用该-debug选项,可以提供许多有用的信息

也许我应该补充一点,这也适用于非HTTP连接。因此,如果您正在执行“ https”,请尝试以下建议的curl命令。如果您不是或希望第二种选择openssl s_client可能会很好


3
请注意,如果您的curl版本是针对其他SSL库(例如GnuTLS)(而不是openssl-使用using curl -V)编译的,则应尝试使用使用该SSL库的二进制文件来调试连接,例如gnutls-cli -V www .google.com 443
蒂姆·

3
  1. 对于TLS握手故障排除,请使用openssl s_client代替curl
  2. -msg 绝招!
  3. -debug 帮助查看实际在套接字上传播的内容。
  4. -status OCSP装订现在应该是标准的。
openssl s_client -connect example.com:443 -tls1_2 -status -msg -debug -CAfile <path to trusted root ca pem> -key <path to client private key pem> -cert <path to client cert pem> 

其他有用的开关 -tlsextdebug -prexit -state

https://www.openssl.org/docs/man1.0.2/man1/s_client.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.