我使用wsHttpBinding
构建了一个自托管的wcf服务器。我正在运行Win 2003服务器R2 SP2。
如果我将其配置为在http://localhost:443/MyService
上收听,那么一切正常。我可以使用Internet Explorer连接到http://localhost:443/MyService
,我收到标准的“错误请求”消息
现在,如果我尝试切换到HTTPS,我正在目睹一种奇怪的现象。
这就是我所做的:
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'是'系统'流程):
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连接不应该超时,我应该至少有一个空白提示,期望我输入一些加密的东西:)
到目前为止,我已经尝试过:
我不知道接下来要尝试什么......有什么想法吗?
答案 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)
:netstat -nao |find "443"
最后一列显示一个数字:
pic no.1
现在打开任务管理器。在pid列的第1部分查找结果编号(如果未启用pid,请从视图选项卡中选择)程序名称显示使用该端口的程序。
禁用使用端口的程序/在我的情况下我从服务中停止了