HttpWebRequest + forçar validação de certificado

Se abrirmos num browser, ex: IE7, um site cujo certificado não é considerado válido, aparece uma mensagem com essa indicação e é necessária a indicação de que queremos avançar para o site (ou não).

Acontece o mesmo quando tentamos aceder a esse mesmo site usando o HttpWebRequest. Por exemplo:

Dim site As String = “https://www.site.com/pagina.aspx

Dim req As HttpWebRequest = WebRequest.Create(site)

Dim c As CredentialCache = New CredentialCache

c.Add(New Uri(site), “Basic”, New NetworkCredential(“username”, “password”))

req.Credentials = c

Dim response As WebResponse = Nothing

response = req.GetResponse()

Ao executar será retornado o seguinte erro:

The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

Ou seja, é necessário forçar a validação do certificado para dar a volta a isto. Como? Com a propriedade ServerCertificateValidationCallback.

Primeiro, criar uma função que indique que indique se vamos ou não aceitar o certificado (neste caso indico que será sempre aceite).

 

 

Private Function ValidateCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean

Return True

End Function

Por fim, adicionado ao Form_Load o seguinte:

</p>

ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateCertificate)</p>

</font></span> 

</blockquote>

</span>o que fará com que aceite sempre os pedidos de validação do certificado.