【问题标题】: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,我会看到一个奇怪的现象。

这是我所做的:

  1. 我已将我的 wcf 配置文件从 http://localhost 更改为 https://localhost 并从 Security=None 更改为 Security=Transport(如许多 wcf 教程中所述)
  2. 我已经像这样注册了我的 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 连接不应该超时,我应该至少有一个空白提示,希望我输入一些加密的东西 :)

到目前为止,我已经尝试过:

  1. 完全按照 MSDN 教程从头开始重做所有步骤
  2. 使用端口 10443 而不是 443
  3. 禁用防火墙
  4. 使用自签名证书

我不知道接下来要尝试什么.. 有什么想法吗?

【问题讨论】:

    标签: wcf tcp ssh windows-server-2003 telnet


    【解决方案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】:
        1. 在命令提示符中:netstat -nao |find "443" 最后一列显示一个数字: pic no.1

        2. 现在打开任务管理器。在 pid 列的第 1 部分查找结果编号(如果未启用 pid,请从视图选项卡中选择)程序名称显示使用端口的程序。

          李>
        3. 禁用使用端口的程序/在我的情况下,我从服务中停止了它

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-10
          • 1970-01-01
          • 2021-12-01
          • 1970-01-01
          • 2021-09-05
          • 2012-10-23
          • 2013-04-11
          • 1970-01-01
          相关资源
          最近更新 更多