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无法访问

Apache 错误:地址已在使用中:make_sock:无法绑定到地址 [::]:443

netstat命令详解

xampp常见问题解决方案

PID 4 的“无法打开进程”正在使用端口 443

blob 上的错误内容类型无法打开 img / 文件已损坏