测试 SSL 连接时,gnutls-cli 挂起

测试 SSL 连接时,gnutls-cli 挂起

我正在运行命令

gnutls-cli -s facebook.com -p 443 --x509cafile /etc/ssl/certs/ca-certificates.crt -d 999

输出为

|<2>| p11: loaded provider 'p11-kit-trust'
|<2>| p11: loaded provider 'gnome-keyring'
|<2>| ASSERT: pkcs11.c:425
Processed 164 CA certificate(s).
Resolving 'facebook.com'...
Connecting to '173.252.120.6:443'...
|<4>| REC[0x872bac8]: Allocating epoch #0

- Simple Client Mode:

然后光标闪烁,它就挂在那里了。使用 strace,我看到在执行了几行代码之后,它到达了一个点,它只是打印

选择(6,[0 5],NULL,NULL,{0,50000})= 0(超时)

一遍又一遍。我尝试将 gnutls 升级到 3.1.23,但结果是一样的。以 root 身份运行它不会改变结果。

为了进行健全性检查,我还运行了:

openssl s_client -connect facebook.com:443 -CAfile /etc/ssl/certs/ca-certificates.crt

并且它确实创建了一个成功的 SSL 连接。有人知道为什么 gnutls-cli 会这样做吗...或者我可以做些什么来让它不这样做?我正在尝试调试一个更大的问题,我认为它可能与此直接相关...

Ubuntu 14.04
gnutls-cli 3.1.23

答案1

你的命令行是错误的。而不是

 gnutls-cli -s facebook.com -p 443 --x509cafile /etc/ssl/certs/ca-certificates.crt -d 999

一定是

 gnutls-cli -p 443 --x509cafile /etc/ssl/certs/ca-certificates.crt -d 999 facebook.com

查看用法:

Usage:  gnutls-cli [options] hostname
...
 -s, --starttls           Connect, establish a plain session and 
                          start TLS when EOF or a SIGALRM is 
                          received.

因此它实际上建立了一个简单的连接并等待来自终端的 EOF,然后才会开始 SSL 握手。

答案2

尝试以下操作:提供gnutls-cli来自标准输入,例如通过在 is 前面加上管道true

true | gnutls-cli -s facebook.com -p 443 --x509cafile /etc/ssl/certs/ca-certificates.crt -d 999

相关内容