让Windows XP SP3远程桌面连接支持网络级身份验证的脚本-阿里云开发者社区

开发者社区> 余二五> 正文

让Windows XP SP3远程桌面连接支持网络级身份验证的脚本

简介:
+关注继续查看

知识点:网络级别身份验证 (NLA) 是一项新的身份验证方法,即在您建立完整的远程桌面连接前就完成了用户身份验证并显示登录屏幕。它是一项更加安全的身份验证方法,可以防止远程计算机受到 黑客或恶意软件的攻击。NLA 的优点是: 最初只需要少量的远程计算机资源。对用户进行身份验证之前,远程计算机仅使用有限的资源,而不是像在先前版本中启动整个远程桌面连接。  可以通过降低拒绝服务攻击(尝试限制或阻止访问 Internet)的风险提供更高的安全保障。  使用远程计算机身份验证可以防止我们连接到因恶意目的而安装的远程计算机。


 

如果在Windows 7或Windows 2008远程桌面里启用了“带网络级别的身份验证”默认在XPSP3里是没有办法用“远程桌面连接”连接到2008的,需要手工的修改二项注册表。
1
 
默认XPSP3是“不支持网络级别的身份验证”如下图:
 2
如何使它支持网络级别的身份验证呢?需要手工的改两个注册表键值,具体操作如下:
  1. 单击 开始 ,单击 运行 ,键入 regedit ,然后按 ENTER 键。
  2. 在导航窗格找到,并单击下面的注册表子项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
  3. 在详细信息窗格中右键单击 安全包 ,然后单击 修改 
  4. 在 数值数据 框中,键入 tspkg 。 将只用于其他 SSP 的任何数据,然后单击 确定 
 3
5、在导航窗格找到,并单击下面的注册表子项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders
6、在详细信息窗格中右键单击 SecurityProviders,然后单击 修改 
7、在 数值数据 框中,键入 credssp.dll 。 将只用于其他 SSP 的任何数据,然后单击 确定 
 
 4 
8、退出注册表编辑器。
9、重新启动计算机。
 5
 
 

======================================================================

Following on from my previous blog entry, while the manual method is simple enough, and we could just import a .REG file to force “Security Packages” and “SecurityProviders” to fixed values, it would be more elegant to have a smarter solution that will make the amendments if necessary.

So here is a VBScript to check if “tspkg” is in “Security Packages” and “credssp.dll” is in “SecurityProviders”, and add them if not. 
It also reports on the status of the GPO settings affecting DisableRootAutoUpdate and CredentialsDelegation (default and saved), but does not attempt to adjust these as they should be done via GPO rather than registry edits.

Use this script at your own risk – I’ve tested it very briefly but there is no error checking or backing up of the keys/values performed, and it does not attempt to verify the OS version is applicable.

If double-clicked then wscript.exe is used by default and the result is displayed in a pop-up window – if it needs to be run in a computer startup script then make sure to explicitly use cscript.exe (and optionally pipe the output to a log file if needed).

 


  1. ' ============================================ 
  2. ' CheckCredSSP.vbs 
  3. ' 
  4. ' Verifies that the settings necessary for CredSSP are enabled on XP clients 
  5. ' As per http://support.microsoft.com/kb/951608 
  6. ' 
  7. ' Checks if DisableRootAutoUpdate policy setting is enabled to avoid a 30-second 
  8. ' delay when clients have no access to Windows Update and NLA is used 
  9. ' 
  10. ' Displays a summary of any credential delegation policy settings found 
  11. ' ============================================ 
  12. const HKEY_LOCAL_MACHINE = &H80000002 
  13. const REG_SZ = 1 
  14. strComputer = "." 
  15.  
  16. ' Variables to hold results of key enumeration and the value types 
  17. arrNames = Array() 
  18. arrTypes = Array() 
  19.  
  20. ' Variables to hold values for REG_MULTI_SZ, REG_SZ and REG_DWORD data 
  21. arrValues = Array() 
  22. strValue = "" 
  23. dwValue = 0 
  24.  
  25. ' Object to allow us access to the registry 
  26. Set objReg=GetObject( _ 
  27.     "winmgmts:{impersonationLevel=impersonate}!\\" & _ 
  28.    strComputer & "\root\default:StdRegProv"
  29.  
  30.  
  31. ' ============================================ 
  32. ' Check for (and add if necessary) tspkg in REG_MULTI_SZ value 
  33. ' ============================================ 
  34. strKeyPath = "SYSTEM\CurrentControlSet\Control\Lsa" 
  35. strValueName = "Security Packages" 
  36. bPresent_tspkg = FALSE 
  37.  
  38. If ( objReg.GetMultiStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strValueName, arrValues ) <> 0 ) Then 
  39.   ' Failed to read the value, exit early 
  40.   WScript.Echo "ERROR - Failed to open value: " & strValueName 
  41.   WScript.Quit 
  42. End If 
  43.  
  44. For Each strElement in arrValues 
  45.   If strElement = "tspkg" Then bPresent_tspkg = TRUE 
  46. Next 
  47.  
  48. If Not bPresent_tspkg Then 
  49.   ReDim Preserve arrValues( UBound( arrValues ) + 1 ) 
  50.   arrValues( UBound( arrValues ) ) = "tspkg" 
  51.   iError = objReg.SetMultiStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strValueName, arrValues ) 
  52.   If ( iError <> 0 ) Then 
  53.     ' Failed to write the value, exit early 
  54.     WScript.Echo "ERROR - Failed to write value: " & strValueName & vbCrLf & "Error code: " & iError 
  55.     WScript.Quit 
  56.   End If 
  57. End If 
  58.  
  59.  
  60. ' ============================================ 
  61. ' Check for (and add if necessary) credssp.dll in REG_SZ value 
  62. ' ============================================ 
  63. strKeyPath = "SYSTEM\CurrentControlSet\Control\SecurityProviders" 
  64. strValueName = "SecurityProviders" 
  65. bPresent_credssp = FALSE 
  66.  
  67. If ( objReg.GetStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue ) <> 0 ) Then 
  68.   ' Failed to read the value, exit early 
  69.   WScript.Echo "ERROR - Failed to open value: " & strValueName 
  70.   WScript.Quit 
  71. End If 
  72.  
  73. ' Convert the comma-separated string into an array of strings to check each element 
  74. arrValues = ConvertStrToArr( strValue ) 
  75. For Each strElement in arrValues 
  76.   ' We use LTrim() to ignore leading spaces (i.e. spaces after commas) 
  77.   If LTrim( strElement ) = "credssp.dll" Then bPresent_credssp = TRUE 
  78. Next 
  79.  
  80. If Not bPresent_credssp Then 
  81.   If ( strValue <> "" ) Then strValue = strValue & ", " 
  82.   strValue = strValue & "credssp.dll" 
  83.   iError = objReg.SetStringValue( HKEY_LOCAL_MACHINE, strKeyPath, strValueName, strValue ) 
  84.   If ( iError <> 0 ) Then 
  85.     ' Failed to write the value, exit early 
  86.     WScript.Echo "ERROR - Failed to write value: " & strValueName & vbCrLf & "Error code: " & iError 
  87.     WScript.Quit 
  88.   End If 
  89. End If 
  90.  
  91.  
  92. ' ============================================ 
  93. ' Check for DisableRootAutoUpdate = 1 
  94. ' ============================================ 
  95. strKeyPath = "SOFTWARE\Policies\Microsoft\SystemCertificates\AuthRoot" 
  96. strValueName = "DisableRootAutoUpdate" 
  97.  
  98. strPolicyOutput = vbCrLf & vbCrLf &_ 
  99.                   "DisableRootAutoUpdate policy setting " 
  100.  
  101. ' Does the value exist and is non-zero? 
  102. If ( objReg.GetDWORDValue( HKEY_LOCAL_MACHINE, strKeyPath, strValueName, dwValue ) = 0 ) Then 
  103.   If ( dwValue <> 0 ) Then 
  104.     strPolicyOutput = strPolicyOutput & "found : ENABLED" & vbCrLf & vbCrLf 
  105.   Else 
  106.     strPolicyOutput = strPolicyOutput & "found : DISABLED" & vbCrLf & vbCrLf 
  107.   End If 
  108. Else 
  109.   strPolicyOutput = strPolicyOutput & "NOT found" & vbCrLf &_ 
  110.                     "Consider enabling the following policy setting if hitting a ~30 second delay:" & vbCrLf &_ 
  111.                     "Administrative Templates > System > Internet Communication Management > Internet Communication Settings" & vbCrLf &_ 
  112.                     "Turn off Automatic Root Certificates Update" & vbCrLf & vbCrLf 
  113. End If 
  114.  
  115.  
  116. ' ============================================ 
  117. ' Check for any policy settings relating to credential delegation 
  118. ' ============================================ 
  119. strKeyPath = "SOFTWARE\Policies\Microsoft\Windows\CredentialsDelegation" 
  120.  
  121. If ( objReg.EnumValues( HKEY_LOCAL_MACHINE, strKeyPath, arrNames, arrTypes ) <> 0 ) Then 
  122.   strPolicyOutput = strPolicyOutput & "Found no credential delegation policy settings (e.g. SSO, saved credentials)" & vbCrLf &_ 
  123.                     "Recommend reading KB951608 if SSO is required." & vbCrLf &_ 
  124.                     "Or check under:" & vbCrLf &_ 
  125.                     "Administrative Templates > System > Credentials Delegation" & vbCrLf 
  126. Else 
  127.   strPolicyOutput = strPolicyOutput & "Found credential delegation policy settings..." & vbCrLf 
  128.  
  129.   strPolicyCheck = CheckPolicy( "DenyDefaultCredentials" ) 
  130.   If ( strPolicyCheck = "" ) Then 
  131.     strPolicyCheck = CheckPolicy( "AllowDefaultCredentials" ) 
  132.     strPolicyCheck = strPolicyCheck & CheckPolicy( "AllowDefCredentialsWhenNTLMOnly" ) 
  133.   Else 
  134.     strPolicyOutput = strPolicyOutput & vbCrLf & "DEFAULT credential delegation (SSO) explicitly DENIED by policy" & vbCrLf 
  135.   End If 
  136.   strPolicyOutput = strPolicyOutput & strPolicyCheck 
  137.  
  138.   strPolicyCheck = CheckPolicy( "DenySavedCredentials" ) 
  139.   If ( strPolicyCheck = "" ) Then 
  140.     strPolicyCheck = CheckPolicy( "AllowSavedCredentials" ) 
  141.     strPolicyCheck = strPolicyCheck & CheckPolicy( "AllowSavedCredentialsWhenNTLMOnly" ) 
  142.   Else 
  143.     strPolicyOutput = strPolicyOutput & vbCrLf & "SAVED credential delegation explicitly DENIED by policy" & vbCrLf 
  144.   End If 
  145.   strPolicyOutput = strPolicyOutput & strPolicyCheck 
  146. End If 
  147.  
  148.  
  149. ' ============================================ 
  150. ' Display summary of actions 
  151. ' ============================================ 
  152. strOutput = "Security Packages - tspkg : " 
  153.  
  154. If Not bPresent_tspkg Then 
  155.   strOutput = strOutput & "PRESENT (added)" 
  156. Else 
  157.   strOutput = strOutput & "PRESENT" 
  158. End If 
  159.  
  160. strOutput = strOutput & vbCrLf & vbCrLf &_ 
  161.             "SecurityProviders - credssp.dll : " 
  162.  
  163. If Not bPresent_credssp Then 
  164.   strOutput = strOutput & "PRESENT (added)" 
  165. Else 
  166.   strOutput = strOutput & "PRESENT" 
  167. End If 
  168.  
  169. WScript.Echo strOutput & strPolicyOutput 
  170.  
  171.  
  172. ' ============================================ 
  173. ' Function to convert a comma-separated string into an array of strings 
  174. ' ============================================ 
  175. Function ConvertStrToArr ( strInput ) 
  176.   Set objRegExp = CreateObject( "VBScript.RegExp" ) 
  177.   objRegExp.IgnoreCase = TRUE 
  178.   objRegExp.Global = TRUE 
  179.   objRegExp.Pattern = ",(?=([^']*'[^']*')*(?![^']*'))" 
  180.   ConvertStrToArr = Split( objRegExp.Replace(strInput, "\b"), "\b" ) 
  181. End Function 
  182.  
  183.  
  184. ' ============================================ 
  185. ' Function to check for a credential delegation policy setting 
  186. ' ============================================ 
  187. Function CheckPolicy ( strPolicy ) 
  188.   dwValue = 0 
  189.   If ( objReg.GetDWORDValue( HKEY_LOCAL_MACHINE, strKeyPath, strPolicy, dwValue ) = 0 ) Then 
  190.     CheckPolicy = strPolicy & " = " & dwValue 
  191.     If ( dwValue <> 0 ) Then 
  192.       CheckPolicy = CheckPolicy & " (ENABLED)" & vbCrLf 
  193.       If ( objReg.EnumValues( HKEY_LOCAL_MACHINE, strKeyPath & "\" & strPolicy, arrNames, arrTypes ) = 0 ) Then 
  194.         If IsArray( arrNames ) Then 
  195.           For i = 0 To UBound( arrNames ) 
  196.             If ( arrTypes( i ) = REG_SZ ) Then 
  197.               If ( objReg.GetStringValue( HKEY_LOCAL_MACHINE, strKeyPath & "\" & strPolicy, arrNames( i ), strValue ) <> 0 ) Then 
  198.                 ' Failed to read the value, exit early 
  199.                  WScript.Echo "ERROR - Failed to open value: " & arrNames( i ) 
  200.                  WScript.Quit 
  201.               End If 
  202.               CheckPolicy = CheckPolicy & " > " & strValue & vbCrLf 
  203.             End If 
  204.           Next 
  205.         Else 
  206.           CheckPolicy = CheckPolicy & " > [no SPNs specified]" & vbCrLf 
  207.         End If 
  208.       Else 
  209.         CheckPolicy = CheckPolicy & " > [no SPNs specified]" & vbCrLf 
  210.       End If 
  211.     Else 
  212.       CheckPolicy = CheckPolicy & " (DISABLED)" & vbCrLf 
  213.     End If 
  214.   End If 
  215. End Function 









本文转自 h2appy  51CTO博客,原文链接:http://blog.51cto.com/h2appy/812554,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
asp.net 服务器最大连接数TCPIP设定
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ParametersTcpTimedWaitDelay 30 (Decimal)MaxUserPort = 65534 (Decimal) MaxHashTableSiz...
766 0
JSP连接MySQL时出现--错误:Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)&#39;解决方案
用代码进行用户验证的时候总是出现这个错误,翻译一下,应该是root用户的是权限的问题没有放开。 那就想办法解决一下吧,具体的来说可以有这样的几种方式。 解决方法,首先想到的是先重启一下MySQL服务吧,但是试了一下,发现这并没有什么用。
818 0
本地模式下(local),java连接spark调用scala语言打成的jar包
本地模式下(local),java连接spark调用scala语言打成的jar包 一,环境构建 1、spark版本 2、Scala语言打成的jar,因为Scala和java都是运行在jvm上的字节码类语言,java可以直接调用。
2482 0
windows 远程桌面连接 RPi 2B
/************************************************************************* * windows 远程桌面连接 RPi 2B * 声明: * 本文主要记录windows下如何远程RPi 2B,通过ssh进去安装xrdp、设置USB * 无线网卡等工作。
652 0
设置windows网络连接别名和linux网络连接别名
windows网络连接别名 C:\Windows\System32\drivers\etc目录下的hosts文件中添加 127.0.0.1 localhost 192.168.1.100 proxy.
663 0
关于国家支持的网络攻击企业需要知道些什么
本文讲的是关于国家支持的网络攻击企业需要知道些什么,对很多公司和他们的首席信息官来说,令人不安的残酷现实是:当今世界极少有(如果有的话)公司不处在数据被网络攻击盗走的风险之下。
882 0
利用shell脚本拒绝TCP连接数大于20的IP
  最近服务器频繁遭到CC攻击,抓包、分析连接数后,发现单台服务器的并发连接数达到5万多,本想利用iptables的connlimit模块对连接数据进行限制的,无奈我接手的这几台服务器都没打此...
733 0
+关注
12613
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载