某些客戶端只能在以管理員身份連接時對 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 Authorities
和Local 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 中打開連接文件時的樣子:
事實證明,問題根本不在於 VPN 配置,甚至不在於證書本身,而在於證書的安裝方式。
我的問題有很多部分,所以我試圖從我的問題中省略“不相關”的資訊。其中一條資訊是我正在使用我開發的自定義軟體以程式方式完成整個 VPN 安裝。
似乎這個問題是由於我的程序在以 Administrator 身份執行時安裝了客戶端證書這一事實引起的。當我嘗試從在普通使用者上下文(非管理員)中執行的程序安裝客戶端證書時,不再出現此問題。
(有關程序化證書安裝的更多詳細資訊,我在 StackOverflow 上發表了這篇文章:X509Certificate2 僅在以管理員身份添加到目前使用者儲存時暫時有效)
至於問題的“它在某些設備上工作”部分,我對兩個因素感到困惑:
- 不知何故,以管理員身份安裝證書允許它工作 - 但只有在電腦重新啟動之前。
- 我在嘗試調試時擺弄了一些電腦,並在其中一些電腦上手動安裝了證書。
因此,我執行自動安裝程序的電腦將“工作”,直到重新啟動。我碰巧手動安裝證書的電腦將無限期地工作*,直到*我再次嘗試執行安裝程序,此時它們將回到前一個類別。
當時我對此一無所知,所以看起來就像“有些工作,有些不工作”。