vigencia verificar validar una symantec seguridad para online necesario certificado c# .net ssl https

c# - validar - verificar ssl de una web



Verifique el certificado SSL remoto durante la solicitud HTTPS (1)

Al hacer una solicitud HTTPS al servidor web remoto, uso WebRequest, que establece una conexión segura con el servidor web remoto. Durante el desarrollo, utilizo el certificado autofirmado en el servidor, y WebRequest no puede establecer una conexión segura, ya que cert no es válido, que es el comportamiento esperado.

Encontré este código que SetCertificatePolicy() "remotos", activado llamando SetCertificatePolicy() método SetCertificatePolicy() en el siguiente código.

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; }

Me pregunto si es posible hacer comprobaciones especiales en certificados SSL remotos (usando el código anterior, por ejemplo), para poder verificar que el servidor web remoto usa un certificado SSL válido, y no solo cualquier certificado válido, sino exactamente el certificado ¿Yo quiero? Por ejemplo, quiero asegurarme de estar hablando con el sitio web www.someplace.com, certificado emitido por ACME Inc, con huella digital 00:11:22: .....

¿Cuál es el enfoque de "mejores prácticas" para este escenario?

¡Gracias!


Si realmente desea fijarlo en un certificado en particular, puede comparar los datos del certificado (en formato DER) con el byte[] en el certificate.GetRawCertData() . certificate.GetRawCertData() .

También puede usar GetCertHashString() y Subject en el parámetro del certificate en RemoteCertificateValidate para obtener la información que RemoteCertificateValidate . El nombre de host debe estar en el nombre alternativo del sujeto del certificado o, si no hay un nombre alternativo de sujeto, en el CN ​​del nombre del sujeto (distinguido). Teniendo en cuenta la forma en que .NET formatea la cadena del asunto, este debería ser el primer CN = que encuentre allí.

También obtendrá más datos si el certificate es una instancia de X509Certificate2 . A continuación, podrá obtener SubjectName como un X500PrincipalName y también las Extensions (para verificar la extensión de nombre alternativo del sujeto). Puede ser útil utilizar herramientas como BouncyCastle para analizar el nombre del sujeto.

También es probable que obtenga más información sobre el nombre de host al que está tratando de contactar en el sender , dependiendo de su tipo de tiempo de ejecución.