Nós não conseguimos nos conectar a um servidor HTTPS utilizando WebRequest
por causa desta mensagem de erro:
"O pedido foi abortado: Não foi possível criar um canal seguro SSL/TLS.`
Sabemos que o servidor não'não tem um certificado HTTPS válido com o caminho utilizado, mas para contornar este problema, usamos o seguinte código que nós'tomamos de outro StackOverflow post:
private void Somewhere() {
ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(AlwaysGoodCertificate);
}
private static bool AlwaysGoodCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors) {
return true;
}
O problema é que o servidor nunca valida o certificado e falha com o erro acima. Alguém tem alguma ideia do que eu devo fazer?
Devo mencionar que eu e um colega fizemos testes há algumas semanas e estava a funcionar bem com algo semelhante ao que escrevi acima. A única "maior diferença" nós'descobrimos que eu'estou usando o Windows 7 e ele estava usando o Windows XP. Isso muda alguma coisa?
O problema que você'está tendo é que o usuário da aspNet não'tem acesso ao certificado. Você tem que dar acesso usando o winhttpcertcfg.exe
Um exemplo de como montar isto é: http://support.microsoft.com/kb/901183
No passo 2 em mais informações
EDIT: Nas versões mais recentes do IIS, esta funcionalidade está integrada na ferramenta de gestão de certificados - e pode ser acedida clicando com o botão direito do rato no certificado e utilizando a opção para gerir chaves privadas. Mais detalhes aqui: https://serverfault.com/questions/131046/how-to-grant-iis-7-5-access-to-a-certificate-in-certificate-store/132791#132791
O erro é genérico e há muitas razões pelas quais a negociação SSL/TLS pode falhar. A mais comum é um certificado de servidor inválido ou expirado, e você cuidou disso fornecendo seu próprio gancho de validação de certificado de servidor, mas não é necessariamente o único motivo. O servidor pode requerer autenticação mútua, pode ser configurado com um conjunto de cifras não suportadas pelo seu cliente, pode ter um desvio de tempo demasiado grande para o aperto de mão ter sucesso e muitas mais razões.
A melhor solução é utilizar o conjunto de ferramentas de resolução de problemas do SChannel. SChannel é o fornecedor SSPI responsável pelo SSL e TLS e o seu cliente irá usá-lo para o aperto de mão. Dê uma olhada em TLS/SSL Tools and Settings.
Veja também Como habilitar o registro de eventos Schannel.