某些客户端仅以管理员身份连接时才能验证 VPN

某些客户端仅以管理员身份连接时才能验证 VPN

我正在尝试设置用户通过 VPN 连接到我们 Azure 托管的网络。所有客户端计算机都运行 Windows 10。通过直接将所需设置添加到系统电话簿文件 ( C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk) 即可在客户端计算机上安装连接。

我遇到了一个有趣的情况,有些用户可以正常连接,但其他用户只有在尝试以管理员权限启动连接时才能连接。

这些用户收到的错误是:

错误 798:找不到可与此可扩展身份验证协议一起使用的证书

尝试通过 Windows 工具栏中的网络菜单进行连接,或者尝试通过 rasphone 或 rasdial 进行连接时,会出现此错误。但有两件有趣的事情需要注意:

  • 这些相同的用户不是首次安装 VPN 连接时出现此问题。起初运行正常。几天后开始出现此问题。
  • 此错误确实不是以管理员身份运行 rasphone 或 rasdial 时会发生这种情况。以管理员身份运行时,连接已成功建立。

正如您所看到的,身份验证应该通过证书完成。确切地说是自签名证书。客户端证书安装在Current User\Personal证书存储中。由于根证书是自签名的,因此需要将其添加为客户端设备的 CA,以便客户端设备能够识别客户端证书是否有效。因此,根证书安装在和证书存储Current User\Trusted Root Certification AuthoritiesLocal Machine\Trusted Root Certification Authorities

这种完全相同的设置,在完全相同的商店中使用完全相同的证书,使用完全相同的电话簿条目,始终有效一些设备,但其他设备需要管理员权限。证书必须有效,否则连接将绝不工作。那么在正常用户环境下,什么原因会导致连接失败呢?

以下是有问题的完整电话簿条目(删除了连接名称和网关地址)。

[Connection Name]
Encoding=1
PBVersion=6
Type=2
AutoLogon=0
UseRasCredentials=1
DialParamsUID=394750015
Guid=C461B777D7AB504AB0AECABC914B7A56
VpnStrategy=7
ExcludedProtocols=0
LcpExtensions=1
DataEncryption=256
SwCompression=1
NegotiateMultilinkAlways=1
SkipDoubleDialDialog=0
DialMode=0
RedialAttempts=3
RedialSeconds=5
IdleDisconnectSeconds=0
RedialOnLinkFailure=1
CallbackMode=0
CustomDialDll=
CustomDialFunc=
CustomRasDialDll=
ForceSecureCompartment=0
DisableIKENameEkuCheck=0
AuthenticateServer=0
ShareMsFilePrint=1
BindMsNetClient=1
SharedPhoneNumbers=0
GlobalDeviceSettings=0
PrerequisiteEntry=
PrerequisitePbk=
ShowMonitorIconInTaskBar=1
CustomAuthKey=13
CustomAuthData=314442430D00000048000000020000004800000017000000000000000000000000000000000000000000000000000000000000000000FE0006000100FD001800
CustomAuthData=97390292EA748C1C312875C0B087FFECAD8EACD100000000
AuthRestrictions=128
IpPrioritizeRemote=0
IpInterfaceMetric=0
IpHeaderCompression=0
IpAddress=0.0.0.0
IpDnsAddress=10.20.0.5
IpDns2Address=10.20.0.6
IpWinsAddress=0.0.0.0
IpWins2Address=0.0.0.0
IpAssign=1
IpNameAssign=2
IpDnsFlags=0
IpNBTFlags=1
TcpWindowSize=0
UseFlags=2
IpSecFlags=0
IpDnsSuffix=
DisableClassBasedDefaultRoute=1
IDI=
IDR=
ImsConfig=0
IdiType=0
IdrType=0
ProvisionType=0
PreSharedKey=
CacheCredentials=0
NumCustomPolicy=0
NumEku=0
UseMachineRootCert=0
Disable_IKEv2_Fragmentation=0
PlumbIKEv2TSAsRoutes=0
NumServers=0
RouteVersion=1
NumRoutes=1
Routes=0100000002000000100000000A0000000000000000000000000000000000000000000000
NumNrptRules=0
AutoTiggerCapable=1
NumAppIds=0
NumClassicAppIds=0
SecurityDescriptor=
ApnInfoProviderId=
ApnInfoUsername=
ApnInfoPassword=
ApnInfoAccessPoint=
ApnInfoAuthentication=1
ApnInfoCompression=0
DeviceComplianceEnabled=0
DeviceComplianceSsoEnabled=0
DeviceComplianceSsoEku=
DeviceComplianceSsoIssuer=
WebAuthEnabled=0
WebAuthClientId=
FlagsSet=0
Options=0
DisableDefaultDnsSuffixes=0
NumTrustedNetworks=0
NumDnsSearchSuffixes=0
PowershellCreatedProfile=0
ProxyFlags=0
ProxySettingsModified=0
ProvisioningAuthority=
AuthTypeOTP=0
GREKeyDefined=0
NumPerAppTrafficFilters=0
AlwaysOnCapable=0
DeviceTunnel=0
PrivateNetwork=0

NETCOMPONENTS=
ms_msclient=1
ms_server=1

MEDIA=rastapi
Port=VPN3-0
Device=WAN Miniport (IKEv2)

DEVICE=vpn
PhoneNumber=MyAzureGatewayAddress.vpn.azure.com
AreaCode=
CountryCode=0
CountryID=0
UseDialingRules=0
Comment=
FriendlyName=
LastSelectedPhone=0
PromoteAlternates=0
TryNextAlternateOnFail=1

当您在 GUI 中打开连接文件时,它看起来如下所示:

“选项”选项卡 安全选项卡 证书属性 配置证书选择

答案1

事实证明,问题根本不在于 VPN 配置,甚至不在于证书本身,而在于证书的安装方式

我的问题有很多部分,所以我试图从问题中省略“不相关”的信息。其中一条信息是,我使用自己开发的自定义软件以编程方式完成整个 VPN 安装。

这个问题似乎是由于我的程序在运行时安装了客户端证书造成的作为管理员。当我尝试从在正常用户环境(非管理员)下运行的程序安装客户端证书时,此问题不再出现。

(有关程序化证书安装的更多详细信息,请参阅我在 StackOverflow 上发布的这篇文章:X509Certificate2 仅在以管理员身份添加到当前用户存储时临时起作用

至于“它起作用了一些设备”部分的问题,我被两个因素所困惑:

  • 不知何故,以管理员身份安装证书可以使其工作 - 但仅限于计算机重新启动之前。
  • 我曾尝试调试一些计算机,但手动在其中一些上安装了证书。

因此,我运行自动安装程序的计算机将“工作”,直到重新启动。而我手动安装证书的计算机将无限期地工作直到我尝试再次运行安装程序,此时它们会重新回到前一个类别。

我当时对此一无所知,所以看起来只是“有些有效,有些无效”。

相关内容