netstat说443是开放的,但我无法用telnet连接到它。为什么?

时间:2009-02-12 16:33:50

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

我使用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...
    
  3. 请注意,我使用的证书是“真实证书”(即由受信任的CA颁发,即Comodo)。服务器响应证书中提到的NS的ping。

    现在,以下内容将超时:

    Microsoft Telnet> open localhost 443
    

    以下是netstat的输出(Pid'4'是'系统'流程):

    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. 使用自签名证书
    5. 我不知道接下来要尝试什么......有什么想法吗?

4 个答案:

答案 0 :(得分:2)

telnet客户端不会知道发送正确构造的请求来启动https握手,所以我想ssl安全服务器只是在等待更多数据。

telnet客户端当然不会知道如何处理来自ssl安全服务器的响应(它肯定不会提示你发送数据)。只有在https握手完成后才能进行通信。

您需要使用知道如何进行握手的客户端。 The openssl binary can do this out of the box.

答案 1 :(得分:1)

Telnet不能用于与受限制的网络进行通信。

查看此microsfot注释。它说“注意:此示例假定Web服务器配置为使用默认HTTP端口(TCP 80)。如果Web服务器正在侦听其他端口,请在示例的第一行中替换该端口号此外,此示例在HTTPS / SSL连接(默认情况下为TCP 443)上无法正常工作,因为telnet客户端无法协商必要的加密命令以建立SSL会话。虽然可以通过HTTPS / SSL进行初始连接port,发出GET请求时不返回任何数据。“

更新:查看此其他备注 HOW TO: Determine If SSL Connectivity Is Not Working on the Web Server or on an Intermediate Device

答案 2 :(得分:1)

正如FerrariB所说,telnet不会执行打开SSL连接所需的谈判。 Telnet对证书和加密一无所知。因此,您可以保证无法通过telnet与HTTPS端口443通信。你必须找到另一种方法去做你想做的事情。

例如,查看TLS上的维基百科页面,直接说明:

  

如果上述任何一个步骤失败,则进行TLS握手   失败,并且未创建连接。

这正是您通过尝试使用telnet与SSL端点进行通信而看到的。

答案 3 :(得分:0)

    命令提示符中的
  1. netstat -nao |find "443" 最后一列显示一个数字: pic no.1

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

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