目前,我正在尝试使用内置的Windows / IPSec客户端,从我的Windows10Enterprise1909建立一个VPN连接到一个远程VPN网关。由于UI没有提供我所需的所有选项,所以我创建并调整了与Powershell的VPN连接(使用具有管理员权限的帐户):
Set-VpnConnection -Name Test -AllUserConnection -ServerName other.vpn.gateway -TunnelType Ikev2 -AuthenticationMethod MachineCertificate -EncryptionLevel Required
Set-VpnConnectionIPsecConfiguration -ConnectionName Test -AuthenticationTransformConstants GCMAES256 -CipherTransformConstants GCMAES256 -EncryptionMethod GCMAES256 -IntegrityCheckMethod SHA384 -PfsGroup PFS2048 -DHGroup Group14 -AllUserConnection我感到非常惊讶的是,Windows显然在重要的地方提供了GCMAES256;请注意,我没有手动输入加密方法等等,而是在输入了一个参数之后,从Powershell ISE提供的建议中得到了它们。
但是,当我拨那个VPN连接时,Windows声称存在“策略匹配错误”。对远程网关的快速调查显示,Windows发送错误的IKEv2建议:
We (responder) are not behind a NAT. NAT-T is already enabled
+IKE-SA:
IKE-Proposal-1 (4 transforms)
ENCR : AES-CBC-256
PRF : PRF-HMAC-SHA1
INTEG: HMAC-SHA1
DH : 14
IKE-Proposal-2 (4 transforms)
ENCR : AES-CBC-256
PRF : PRF-HMAC-SHA-256
INTEG: HMAC-SHA-256
DH : 14
IKE-Proposal-3 (4 transforms)
ENCR : AES-CBC-256
PRF : PRF-HMAC-SHA-384
INTEG: HMAC-SHA-384
DH : 14
-Could not match any proposal. See VPN-Debug trace for more information所以Windows发送了三个建议,它们都是错误的。例如,在我的Powershell命令中,我已经明确地告诉它使用GCMAES256进行加密,但是很明显,Windows坚持并提出了美学256-CBC。
请有人解释一下,这是Windows中的一个bug,还是我做错了什么。我是否必须在Windows中启用GCMAES256?
此外,为什么Windows建议使用SHA1和SHA-256 (在上面的代码中有建议1和2),而我已经明确告诉它使用SHA-384?
附带注意:当然,我可以在远程网关上启用美学256-CBC,但我认为这只是最后的手段.我真的很想知道在端发生了什么.
发布于 2020-10-02 06:25:35
我考虑删除这个问题是因为我自己找到了答案,问题并不是因为Windows中的一个bug。不过,我知道我并不是唯一有这个问题的人,所以我把问题和答案留在这里作参考。在这样说之后:
默认情况下,Windows堆栈仍然不提供强身份验证、密码、加密、完整性和交换算法;相反,您必须显式地启用强IPSec IPSec加密。即使是最新版本的Windows 10 (撰写本文时)也是如此,遗憾的是,在通常创建IPSec连接的图形用户界面中,Windows没有提供适当的选项。
在研究如何在Windows中启用强加密时,您将不可避免地遇到以下解决方案:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters\NegotiateDH2048_AES256,然后将其设置为以下值之一: 0:禁用AES-256-CBC和MODP-2048 1:Enable AES-256-CBC和MODP-2048 2:强制执行AES-256-CBC和MODP-2048。因此,我们有一个快速的方法来启用每个人都想要的强加密,只要编辑一个注册表值,我们中的大多数人都习惯了,对吗?当然,我们希望确保强加密是实际使用的,所以我们将这个值设置为2,以防止选择弱方案,或者阻止我们连接到只提供弱加密算法的站点。
几天后,我们意识到这还不够,因为我们现在想连接到一个使用另一个DH组的站点,例如。因此,我们咬紧牙关,学习如何通过Powershell配置VPN IPSec连接。
接下来,我们想知道为什么Windows不尊重我们通过Powershell提供的特定VPN IPSec连接的加密算法,以及为什么它发送错误的建议,我们在这个站点上写问题。
Windows不尊重我们的Powershell VPN IPSec配置的原因很简单:
必须从字面上理解上述注册表中的值2的描述。执行意味着,好,执行,这反过来意味着任何IPSec VPN连接的加密参数都将被覆盖,而MODP-2048和AES256-CBC将被替代。
这并不意味着只要配置或提供了一些较弱的东西,Windows就会坚持使用AES256-CBC和MODP-2048。这实际上意味着此设置在任何情况下都将覆盖其他配置机制提供的其他设置。
因为我删除了注册表值,所以Windows在建立VPN IPSec连接时使用并提供了正确的加密配置(即通过Powershell提供的配置)。不需要重新启动它来改变行为。
请注意,我没有尝试如果将注册表值设置为1会发生什么;我只是删除了它,因为只要您通过Powershell创建VPN IPSec连接就没有任何好处,我将在以后一直这样做。
同样,我也没有研究是否有可能通过组策略或其他机制启用强加密与VPN IPSec连接--如果您能说出任何相关信息,请留下评论。
https://security.stackexchange.com/questions/239080
复制相似问题