Netstat显示443端口已经打开,但是我不能用telnet连上它,为什么?

5
我已经建立了一个自托管的wcf服务器,使用了wsHttpBinding。我正在运行Win 2003服务器R2 SP2。
如果我将其配置为侦听http://localhost:443/MyService,则一切正常。我可以使用Internet Explorer连接到http://localhost:443/MyService,并获得标准的“Bad Request”消息。
现在,如果我尝试切换到HTTPS,我会看到一个奇怪的现象。
以下是我所做的事情:
  1. I've changed my wcf config file from http://localhost to https://localhost and from Security=None to Security=Transport (as explained in numerous wcf tutorials)
  2. I've registered my HTTP port like this :

    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中发出打开命令时从TCPView捕获的截图:

alt text http://img26.imageshack.us/img26/3376/tcpview2si6.jpg

我有点困惑。对我来说,如果netstat显示服务器正在443端口上监听,那么连接到443的telnet连接不应该超时,而且我应该至少有一个空白提示符,让我输入一些加密内容 :)

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

  1. 重新从头开始按照MSDN教程的步骤进行所有操作
  2. 使用10443端口代替443端口
  3. 禁用防火墙
  4. 使用自签名证书

我不知道下一步该怎么做.. 有什么建议吗?

4个回答

2
Telnet客户端不知道如何发送一个正确构造的请求来启动HTTPS握手,所以我想SSL安全服务器只是在等待更多数据。Telnet客户端肯定不知道如何处理来自SSL安全服务器的响应(它肯定不会提示您发送数据)。只有HTTPS握手完成后,通信才能进行。您需要使用一个知道如何握手的客户端。OpenSSL二进制文件可以直接执行此操作。

1

Telnet 无法用于与加密网站通信。

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

更新:查看这个其他说明 如何确定 SSL 连接在 Web 服务器或中间设备上未正常工作


是的,这就是我说的,我至少应该得到一个“初始连接”,而不是超时... 顺便说一下,IE也无法工作... - Brann
我刚刚尝试了一个正常的 HTTPS 服务器。你是对的,它不起作用。 - Brann
顺便说一句,你刚刚发布的链接没有帮助:我没有使用IIS(我的服务是自托管的),而且这个教程似乎集中在连接问题上(我没有这个问题,因为我直接在服务器上)。 - Brann

1

正如FerrariB所说,telnet不执行打开SSL连接所需的协商。 Telnet对证书和加密一无所知。 因此,您保证无法通过telnet与HTTPS端口443通信。 您将不得不找到另一种方法来完成您正在尝试的操作。

例如,请查看维基百科上关于TLS的页面,其中直接说明:

如果上述任何步骤失败,则TLS握手失败,连接不会创建。

这正是您尝试使用telnet与SSL端点通信时看到的情况。


0
在命令提示符中输入:netstat -nao |find "443",最后一列会显示一个数字:pic no.1
现在打开任务管理器,在第一部分的PID列中找到结果数字(如果PID未启用,请从“视图”选项卡中选择它),程序名称显示使用该端口的程序。
禁用使用该端口的程序/在我的情况下,我通过服务停止了它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接