Überprüfen Sie den remote-SSL-Zertifikat bei HTTPS-request
Als machen HTTPS-Anforderung an den remote-server, ich benutze WebRequest, das schafft eine sichere Verbindung mit remote-web-server. Während der Entwicklung habe ich selbst-signiertes Zertifikat auf dem server, und WebRequest scheitert eine sichere Verbindung, da die cert nicht gültig ist, das ist das erwartete Verhalten.
Habe ich gefunden, dass dieser code "Fernbedienungen" cert überprüfen Sie, aktiviert durch den Aufruf SetCertificatePolicy()
- Methode im folgenden code.
public static void SetCertificatePolicy()
{
ServicePointManager.ServerCertificateValidationCallback
+= RemoteCertificateValidate;
}
///<summary>
///Remotes the certificate validate.
///</summary>
private static bool RemoteCertificateValidate(
object sender, X509Certificate cert,
X509Chain chain, SslPolicyErrors error)
{
//trust any certificate!!!
System.Console.WriteLine("Warning, trust any certificate");
return true;
}
Frage ich mich, ob es möglich ist, spezielle überprüfungen auf remote-SSL-cert (mit obigen code, zum Beispiel), so dass ich überprüfen kann, dass die remote-web-server mit gültigen SSL-cert, und nicht nur alle gültigen cert, aber genau die, die ich will? Zum Beispiel möchte ich sicherstellen, dass ich im Gespräch bin www.someplace.com website, cert ausgestellt ACME Inc, mit Fingerabdruck 00:11:22:.....
Was ist ein "best practice" - Ansatz für dieses Szenario?
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wirklich wollen, nageln Sie Sie auf ein bestimmtes Zertifikat, vergleichen kann man die Zertifikat-Daten (in DER-format), um die
byte[]
imcertificate.GetRawCertData()
.Können Sie auch
GetCertHashString()
undSubject
auf diecertificate
parameter inRemoteCertificateValidate
zu Holen Sie sich die Informationen, die Sie suchen. Der hostname sollte im subject alternative name im Zertifikat oder, wenn es nicht ein subject alternative name im CN des subject (definierten) Namen. Anbetracht der Art und Weise .NET formatiert die Zeichenkette, dies sollte die erste CN= Sie finden es.Erhalten Sie auch mehr Daten, wenn
certificate
ist eine Instanz vonX509Certificate2
. Sie werden dann in der Lage zu bekommenSubjectName
alsX500PrincipalName
und auch dieExtensions
(überprüfen der subject alternative name Erweiterung). Es könnte nützlich sein, um die Verwendung von tools wie BouncyCastle für die Analyse der Thema-name.Du bist wahrscheinlich auch mehr Informationen über den Hostnamen, den Sie versuchen zu Kontaktieren, in der
sender
je nach Laufzeit-Typ.