单台Slackware主机访问本地网站TLS握手停滞问题求助
这种卡在TLS握手阶段的情况,既然两台Slackware系统近乎相同、证书也已经导入,而且换Lynx浏览器也有问题,基本可以排除浏览器本身的故障,大概率是系统或网络层面的差异导致的,给你列几个最值得优先排查的点:
网络连通性/防火墙拦截:先确认有问题的机器能不能正常连到Web服务器的443端口。可以在终端跑
telnet 你的服务器IP 443,如果连不上,说明端口被防火墙拦截了——检查这台机器的iptables/nftables规则,看看是不是把出站的443端口给禁了,或者服务器那边的防火墙没放通这台机器的IP。也可以用openssl s_client -connect 服务器IP:443,这个命令能输出TLS握手的详细日志,要是握手失败会明确告诉你原因。系统时间不同步:TLS证书的有效性校验非常依赖准确的系统时间,如果这台机器的时间和Web服务器差了几个小时以上(比如出现证书还没生效或者已经过期的“假状态”),握手会直接卡住。用
date命令对比两台机器和服务器的时间,要是差得远,用ntpdate pool.ntp.org或者chronyc makestep同步一下时间再试试。CA证书未导入系统级存储:你说证书已经导入浏览器,但Lynx这类文本浏览器是用系统级证书库的,不是浏览器自己的。Slackware的系统证书目录是
/etc/ssl/certs/,把你的自建CA证书复制到这个目录,然后运行c_rehash更新证书哈希链,之后再用Lynx测试,如果能访问了,说明之前只导入了浏览器证书,系统层面没配置。加密套件不兼容:虽然系统近乎相同,但可能其中一台的OpenSSL版本或者加密配置有差异。比如服务器配置的加密套件,这台机器的OpenSSL不支持。可以用
openssl ciphers -v查看两台机器的可用加密套件,再对比Web服务器的配置(比如Apache的SSLCipherSuite或者Nginx的ssl_ciphers),看看有没有重叠的套件。如果服务器用了较新的套件,而这台机器的OpenSSL版本偏旧,就会导致握手失败。本地DNS解析异常:如果是用域名访问本地服务器,可能这台机器的DNS解析出了问题,把域名指向了错误的IP。试试直接用服务器的IP访问,如果能正常加载,那就是DNS的锅——检查
/etc/resolv.conf或者/etc/hosts文件,看看域名解析配置有没有错误。
内容的提问来源于stack exchange,提问作者user150504

