netstat 说 443 已打开,但我无法使用 telnet 连接到它.. 为啥?
Posted
技术标签:
【中文标题】netstat 说 443 已打开,但我无法使用 telnet 连接到它.. 为啥?【英文标题】:netstat says 443 is open, but I cannot connect to it with telnet .. why?netstat 说 443 已打开,但我无法使用 telnet 连接到它.. 为什么? 【发布时间】:2010-10-07 05:31:56 【问题描述】:我使用wsHttpBinding
构建了一个自托管的 wcf 服务器。我正在运行 Win 2003 服务器 R2 SP2。
如果我将其配置为监听http://localhost:443/MyService
,一切正常。我可以使用 Internet Explorer 连接到 http://localhost:443/MyService
,并收到标准的“错误请求”消息
现在,如果我尝试切换到 HTTPS,我会看到一个奇怪的现象。
这是我所做的:
-
我已将我的 wcf 配置文件从
http://localhost
更改为 https://localhost
并从 Security=None
更改为 Security=Transport
(如许多 wcf 教程中所述)
我已经像这样注册了我的 HTTP 端口:
httpcfg delete ssl -i 0.0.0.0:443
httpcfg set ssl -i 0.0.0.0:443 -h ea2e450ef9d4...
请注意,我使用的证书是“真实证书”(即由受信任的 CA 颁发,即 Comodo)。服务器响应证书中提到的 NS 上的 ping。
现在,以下将超时:
Microsoft Telnet> open localhost 443
这是netstat
的输出(Pid '4' 是 'System' 进程):
netstat -nao
Proto Local Adress Remote Adress State Pid
TCP 0.0.0.0:443 0.0.0.0:0 Listening 4
这是我在 telnet 中发出 open 命令时从TCPView 捕获的屏幕截图:
alt text http://img26.imageshack.us/img26/3376/tcpview2si6.jpg
我有点困惑。对我来说,如果netstat
说服务器正在侦听 443,那么到 443 的 telnet 连接不应该超时,我应该至少有一个空白提示,希望我输入一些加密的东西 :)
到目前为止,我已经尝试过:
-
完全按照 MSDN 教程从头开始重做所有步骤
使用端口 10443 而不是 443
禁用防火墙
使用自签名证书
我不知道接下来要尝试什么.. 有什么想法吗?
【问题讨论】:
【参考方案1】:Telnet 不能用于与加密网络通信。
查看此microsfot 注释。它说 "注意:此示例假定 Web 服务器配置为使用默认 HTTP 端口 (TCP 80)。如果 Web 服务器正在侦听不同的端口,请在示例的第一行替换该端口号. 此外,此示例无法通过 HTTPS/SSL 连接(默认情况下为 TCP 443)正常工作,因为 telnet 客户端无法协商建立 SSL 会话所需的加密命令。尽管可以通过 HTTPS/SSL 进行初始连接端口,发出 GET 请求时不返回任何数据。”
更新:查看其他注释HOW TO: Determine If SSL Connectivity Is Not Working on the Web Server or on an Intermediate Device
【讨论】:
是的,这就是我所说的,我至少应该得到一个“初始连接”而不是超时。顺便说一句,IE 也不能正常工作...... 我刚刚在一个正常工作的 https 服务器上进行了尝试。你是对的,它不起作用。 顺便说一句,您刚刚发布的链接没有帮助:我没有使用 IIS(我的服务是自托管的),而且这个方法似乎专注于连接问题(我没有,因为我直接在服务器上)【参考方案2】:正如 FerrariB 所说,telnet 不会执行打开 SSL 连接所需的协商。 Telnet 对证书和加密一无所知。因此,您可以保证无法通过 telnet 与 HTTPS 端口 443 进行通信。你必须找到另一种方法来做你想做的任何事情。
例如,查看TLS 上的***页面,它直接说:
如果上述任一步骤失败,TLS 握手 失败,并且未创建连接。
这正是您尝试使用 telnet 与 SSL 端点通信时所看到的。
【讨论】:
【参考方案3】:telnet 客户端不会知道发送正确构造的请求来启动 https 握手,所以我想 ssl 安全服务器只是在等待更多数据。
telnet 客户端肯定不会知道如何处理来自 ssl 安全服务器的响应(它肯定不会提示您发送数据)。只有在 https 握手完成后才能进行通信。
您需要使用知道如何握手的客户端。 The openssl binary can do this out of the box.
【讨论】:
【参考方案4】:在命令提示符中:netstat -nao |find "443"
最后一列显示一个数字:
pic no.1
现在打开任务管理器。在 pid 列的第 1 部分查找结果编号(如果未启用 pid,请从视图选项卡中选择)程序名称显示使用端口的程序。
李>禁用使用端口的程序/在我的情况下,我从服务中停止了它
【讨论】:
以上是关于netstat 说 443 已打开,但我无法使用 telnet 连接到它.. 为啥?的主要内容,如果未能解决你的问题,请参考以下文章
firewalld拦截,导致安装ssl证书后https无法访问