Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
CertificateValidation.cs
Go to the documentation of this file.
6
7namespace System.Net;
8
9internal static class CertificateValidation
10{
11 internal unsafe static SslPolicyErrors BuildChainAndVerifyProperties(X509Chain chain, X509Certificate2 remoteCertificate, bool checkCertName, bool isServer, string hostName)
12 {
13 SslPolicyErrors sslPolicyErrors = SslPolicyErrors.None;
14 bool flag = chain.Build(remoteCertificate);
15 if (!flag && chain.SafeHandle.DangerousGetHandle() == IntPtr.Zero)
16 {
18 }
19 if (checkCertName)
20 {
21 uint num = 0u;
22 global::Interop.Crypt32.SSL_EXTRA_CERT_CHAIN_POLICY_PARA sSL_EXTRA_CERT_CHAIN_POLICY_PARA = default(global::Interop.Crypt32.SSL_EXTRA_CERT_CHAIN_POLICY_PARA);
23 sSL_EXTRA_CERT_CHAIN_POLICY_PARA.cbSize = (uint)sizeof(global::Interop.Crypt32.SSL_EXTRA_CERT_CHAIN_POLICY_PARA);
24 sSL_EXTRA_CERT_CHAIN_POLICY_PARA.dwAuthType = (isServer ? 1u : 2u);
25 sSL_EXTRA_CERT_CHAIN_POLICY_PARA.fdwChecks = 0u;
26 sSL_EXTRA_CERT_CHAIN_POLICY_PARA.pwszServerName = null;
27 global::Interop.Crypt32.SSL_EXTRA_CERT_CHAIN_POLICY_PARA sSL_EXTRA_CERT_CHAIN_POLICY_PARA2 = sSL_EXTRA_CERT_CHAIN_POLICY_PARA;
28 global::Interop.Crypt32.CERT_CHAIN_POLICY_PARA cERT_CHAIN_POLICY_PARA = default(global::Interop.Crypt32.CERT_CHAIN_POLICY_PARA);
29 cERT_CHAIN_POLICY_PARA.cbSize = (uint)sizeof(global::Interop.Crypt32.CERT_CHAIN_POLICY_PARA);
30 cERT_CHAIN_POLICY_PARA.dwFlags = 0u;
31 cERT_CHAIN_POLICY_PARA.pvExtraPolicyPara = &sSL_EXTRA_CERT_CHAIN_POLICY_PARA2;
32 global::Interop.Crypt32.CERT_CHAIN_POLICY_PARA cpp = cERT_CHAIN_POLICY_PARA;
33 fixed (char* pwszServerName = hostName)
34 {
35 sSL_EXTRA_CERT_CHAIN_POLICY_PARA2.pwszServerName = pwszServerName;
36 cpp.dwFlags |= 4031u;
37 SafeX509ChainHandle safeHandle = chain.SafeHandle;
38 num = Verify(safeHandle, ref cpp);
39 if (num == 2148204815u)
40 {
41 sslPolicyErrors |= SslPolicyErrors.RemoteCertificateNameMismatch;
42 }
43 }
44 }
45 if (!flag)
46 {
47 sslPolicyErrors |= SslPolicyErrors.RemoteCertificateChainErrors;
48 }
49 return sslPolicyErrors;
50 }
51
52 private unsafe static uint Verify(SafeX509ChainHandle chainContext, ref global::Interop.Crypt32.CERT_CHAIN_POLICY_PARA cpp)
53 {
54 global::Interop.Crypt32.CERT_CHAIN_POLICY_STATUS pPolicyStatus = default(global::Interop.Crypt32.CERT_CHAIN_POLICY_STATUS);
55 pPolicyStatus.cbSize = (uint)sizeof(global::Interop.Crypt32.CERT_CHAIN_POLICY_STATUS);
56 bool flag = global::Interop.Crypt32.CertVerifyCertificateChainPolicy((IntPtr)4, chainContext, ref cpp, ref pPolicyStatus);
57 if (System.Net.NetEventSource.Log.IsEnabled())
58 {
59 System.Net.NetEventSource.Info(chainContext, $"CertVerifyCertificateChainPolicy returned: {flag}. Status: {pPolicyStatus.dwError}", "Verify");
60 }
61 return pPolicyStatus.dwError;
62 }
63}
static unsafe SslPolicyErrors BuildChainAndVerifyProperties(X509Chain chain, X509Certificate2 remoteCertificate, bool checkCertName, bool isServer, string hostName)
static unsafe uint Verify(SafeX509ChainHandle chainContext, ref global::Interop.Crypt32.CERT_CHAIN_POLICY_PARA cpp)
static readonly System.Net.NetEventSource Log
static void Info(object thisOrContextObject, FormattableString formattableString=null, [CallerMemberName] string memberName=null)
static readonly IntPtr Zero
Definition IntPtr.cs:18