सबसे पहले - मैं माफी मांगता हूं, क्योंकि मैंने उस समाधान का उपयोग किया है जो @devstuff द्वारा वर्णित किया गया था। हालाँकि, मैंने इसे सुधारने के कुछ तरीके ढूंढ लिए हैं।
- स्वयं-हस्ताक्षरित प्रमाणपत्रों को जोड़ना
- प्रमाण पत्र के कच्चे डेटा द्वारा तुलना
- वास्तविक प्रमाणपत्र प्राधिकारी सत्यापन
- कुछ अतिरिक्त टिप्पणियाँ और सुधार
यहाँ मेरा संशोधन है:
private static X509Certificate2 caCertificate2 = null;
private static bool ValidateServerCertficate(
object sender,
X509Certificate cert,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors == SslPolicyErrors.None)
{
return true;
}
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;
var returnedServerCert2 = new X509Certificate2(cert);
chain.ChainPolicy.ExtraStore.Add(caCertificate2);
bool isChainValid = chain.Build(returnedServerCert2);
if (!isChainValid)
{
string[] errors = chain.ChainStatus
.Select(x => String.Format("{0} ({1})", x.StatusInformation.Trim(), x.Status))
.ToArray();
string certificateErrorsString = "Unknown errors.";
if (errors != null && errors.Length > 0)
{
certificateErrorsString = String.Join(", ", errors);
}
Log.Error("Trust chain did not complete to the known authority anchor. Errors: " + certificateErrorsString);
return false;
}
bool isValid = chain.ChainElements
.Cast<X509ChainElement>()
.Any(x => x.Certificate.RawData.SequenceEqual(caCertificate2.GetRawCertData()));
if (!isValid)
{
Log.Error("Trust chain did not complete to the known authority anchor. Thumbprints did not match.");
}
return isValid;
}
प्रमाणपत्र सेट करना:
caCertificate2 = new X509Certificate2("auth/ca.crt", "");
var clientCertificate2 = new X509Certificate2("auth/client.pfx", "");
पास करने का तरीका
ServerCertificateValidationCallback(ValidateServerCertficate)
client.pfx
इस तरह से कुंजी और CERT के साथ उत्पन्न होता है:
openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx