为什么Windows 7/2008 mstsc在服务器证书警告之前要求input用户名密码?

当使用Windows 7 mstsc连接到Windows Server 2008(远程桌面)时,我注意到我无法解释的一个问题。

mstsc首先要求input用户名密码。 如果我提供了错误的信息,mstsc会告诉我“用于连接的凭据不起作用”。

在这里输入图像说明

只有在提供正确的后,mstsc才会警告服务器的证书不可信。

在这里输入图像说明

我认为mstsc应该提示input“server certificate not trusted”,然后才能确认“我的用户名/密码是否被服务器接受”。

所以我的问题是:是否有可能,如果我连接的服务器是伪造的(由攻击者托pipe),我的证书会被破坏?

即使我的凭证在这种情况下永远不会受到影响,在请求用户名/密码之前,mstsc提示服务器证书问题不是更好吗? 至less,这可以消除普通用户对密码被盗的担忧。

这里发生的事情有点复杂,但是如果你阅读NLA和CredSSP,你会得到一个更好的图片。

http://technet.microsoft.com/en-us/library/cc749211%28WS.10%29.aspx

http://en.wikipedia.org/wiki/Network_Level_Authentication

基本上,要回答你的问题…不,一个伪造的服务器不会妥协你的凭据。 他们要做的第一件事就是欺骗你的DNS到一个不正确的IP,但即使这样RDP现在的工作方式(假设我们正在谈论一个Win7或Vista客户端和Win2008或更新的服务器)的凭据是encryption和不暴露(警告是在Technet文章的底部解释NTLM)。

以下是摘自Technet文章的文章:

与WindowsServer®2003terminal服务器的体验不同,凭证提示位于客户端计算机上,而不是服务器上。 最重要的是,客户端凭证提示符位于安全桌面上。 因此,即使terminal服务客户端也不能看到凭据,这是一个重要的通用标准要求。 此外,从服务器身份authentication之前,从提示获得的凭证将不会被委托(取决于策略configuration)。 最后,terminal服务器在validation客户端之前不会为用户build立一个会话(在服务器上消耗大量的内存和CPU处理时间),从而降低服务器成功拒绝服务攻击的几率。

编辑:让我们添加一个例子来澄清…

示例#1 – 用户访问远程服务器并使用正确的密码

在这个例子中,您将input用户名和密码,它将向域名进行身份validation,以validation其是否为有效的用户名/密码,然后尝试连接到远程服务器。 在这一点上,如果它是第一个连接,你可能会得到“无法validation远程计算机的身份”,你可以select信任或不信任。

示例2 – 用户访问远程服务器并使用不正确的密码

在这里你会看到你张贴的照片…证书没有工作。 请input新的凭据。 这是在客户端本地完成的(通过Kerberos票据或DCvalidation),而不需要连接到远程服务器。

示例3 – 用户无权访问远程服务器,但使用了正确的用户名和密码

在这里你可以在本地进行身份validation,因为它是一个有效的账户和密码,但是一旦你连接到服务器来传递凭证,你将会得到:

登录无效

希望有帮助…