![测试 SSL 连接时,gnutls-cli 挂起](https://linux22.com/image/649325/%E6%B5%8B%E8%AF%95%20SSL%20%E8%BF%9E%E6%8E%A5%E6%97%B6%EF%BC%8Cgnutls-cli%20%E6%8C%82%E8%B5%B7.png)
我正在运行命令
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