当使用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,因为它是一个有效的账户和密码,但是一旦你连接到服务器来传递凭证,你将会得到:

希望有帮助…