从我的一台服务器连接到https站点时遇到一个奇怪的问题.
当我输入:
telnet puppet 8140
我看到了一个标准的telnet控制台,可以像往常一样与服务器通信:
Connected to athena.hidden.tld.
Escape character is '^]'.
GET / HTTP/1.1
400 Bad RequestBad Request
Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.
Instead use the HTTPS scheme to access this URL, please.
Hint: https://athena.hidden.tld:8140/
Apache/2.2.16 (Debian) Server at athena.hidden.tld Port 8140
Connection closed by foreign host.
但是当我尝试使用ssl连接到同一主机和端口时:
openssl s_client -connect puppet:8140
它不起作用
connect: No route to host
connect:errno=113
我很迷惑.起初它听起来像防火墙问题,但这不可能,是吗?因为这也会阻止telnet连接.
作为防火墙我在两台服务器上使用ferm.
这些系统是debian squeeze vm-box.
[编辑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并成功.