从我的一台服务器连接到https站点时出现了一个奇怪的问题。
当我input:
telnet puppet 8140
我提供了一个标准的telnet控制台,并可以一如既往地与服务器通话:
Connected to athena.hidden.tld. Escape character is '^]'. GET / HTTP/1.1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> Reason: You're speaking plain HTTP to an SSL-enabled server port.<br /> Instead use the HTTPS scheme to access this URL, please.<br /> <blockquote>Hint: <a href="https://athena.hidden.tld:8140/"><b>https://athena.hidden.tld:8140/</b></a></blockquote></p> <hr> <address>Apache/2.2.16 (Debian) Server at athena.hidden.tld Port 8140</address> </body></html> Connection closed by foreign host.
但是当我尝试连接到相同的主机和端口与SSL:
openssl s_client -connect puppet:8140
它不工作
connect: No route to host connect:errno=113
我很困惑。 起初它听起来像是一个防火墙问题,但这不可能,可以吗? 因为这也会阻止telnet连接。
作为防火墙我在两台服务器上都使用了ferm。 这个系统是debian压缩虚拟机。
编辑1
即使当我尝试直接连接IP地址:
openssl s_client -connect 198.51.100.1:8140 #address exchanged connect: No route to host connect:errno=113
使用两个主机上的防火墙
service ferm stop
也没有帮助。
但是当我这样做
openssl s_client -connect localhost:8140
在服务器机器上连接好。
编辑2
如果我用telnet连接到IP,它也不能工作。
telnet 198.51.100.1 8140 Trying 198.51.100.1... telnet: Unable to connect to remote host: No route to host
混淆可能来自IPv6。 我的所有主机上都有IPv6。 看来,telnet使用默认情况下,IPv6的工作。 例如:
telnet -6 puppet 8140
工作但是
telnet -4 puppet 8140
不起作用。 所以IPv4路由似乎有问题。 openssl似乎只(或默认)使用IPv4,因此失败,但telnet使用IPv6并成功。
你能检查你是否可以ping通目标主机? (IPv4)看来
这可能只是一个简单的IPv4连接问题,不适用于目标主机。 两台机器上的IPv4路由是否正常?
正如你注意到的,它看起来像是在运行openssl缺乏ipv6支持。 一篇LWN文章给出了一些背景知识,但看起来像你最简单的解决scheme(短重build一个自定义打补丁openssl)是切换到gnutls 。
根据您可以使用的telnet,可能会有一个-4或-6开关来强制限制IP版本,从而允许您规划IPv4或IPv6的关注点。
netstat -arn输出是什么样的? 是否有可用于目的地的IPv6路由和/或默认的IPv6路由?
Connected to athena.hidden.tld.
看起来像你通过主机名连接。 尝试使用IP地址来消除DNS问题的可能性:
openssl s_client -connect puppet.master.ip.address:8140
你必须检查openssl的版本。 在那里有一个奇怪的错误报告113 …如果你深入挖掘一下,你可能会看到一个“握手”问题…. IIRC,0.9.8有问题…如果你在那个版本。 或以下…尝试更新你的openssl。
检查了这一点… https://stackoverflow.com/questions/8619706/running-curl-with-openssl-0-9-8-against-openssl-1-0-0-server-causes-handshake-er/ 8621263#8621263