Se quiseres consumir web services que estejam alojados num servidor https programaticamente em c# basta, antes da chamada ao serviço, alterar a politica de certificados usada pelo método:
System.Net.ServicePointManager.CertificatePolicy = new MyCertificatePolicy();
Isto faz com que a chamada ao serviço use a nossa classe, MyCertificatePolicy, para saber se aceita os certificados usados pelo servidor. Assim, se quiseres que o programa aceite todos os certificados, mesmo que tenham problemas de segurança (mal assinados, etc) basta definir a classe como:
public class MyCertificatePolicy : System.Net.ICertificatePolicy
{
public bool CheckValidationResult(System.Net.ServicePoint sp,
System.Security.Cryptography.X509Certificates.X509Certificate cert,
System.Net.WebRequest req,
int problem)
{
return true;
}
}
Simples.
Update:
A property CertificatePolicy está marcada como obsoleta. A forma correcta é passar um delegado para o ServerCertificateValidationCallback. No meu caso, fiz um delegado anónimo:
ServicePointManager.ServerCertificateValidationCallback += delegate
{
return true;
};

2 comments
Comments feed for this article
Março 31, 2008 às 10:49 pm
caxaria
Fica para referência que este método já está marcado como obsoleto.. A ver se esta semana coloco o código mais recente…
Abril 12, 2008 às 6:59 pm
IIS Resources - Self SSL « using System.Reflection;
[...] 12, 2008 in IIS, Microsoft Na sequência do post que escrevi sobre aceder web services sobre https (SSL) achei que deveria escrever algo sobre como configurar o IIS para usar um certificado que seja [...]