Я делаю httpwebrequest с использованием общедоступного файла сертификата Root Authority X509. У меня есть только открытый ключ, а не закрытый ключ. Все отлично работает из консольного приложения, но не работает из приложения asp.net. Я получаю сообщение об ошибке: «Базовое соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS».
Опция отключения проверки не является опцией.
Вот код
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://xxxxxxx/gateway.aspx");
string post = "abcdef";
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
req.ContentLength = post.Length;
var cert = System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromCertFile(@"c:\temp\root.cer");
req.ClientCertificates.Add(cert);
StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
stOut.Write(post.ToString());
stOut.Close();
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Вот системные журналы из сокетов System.Net и System.Net.
Информация о System.Net: 0: [5928] SecureChannel # 8106798 - Невозможно создать цепочку сертификатов для доверенного корневого органа.
Информация System.Net: 0: [5928] SecureChannel # 8106798 - Удаленный сертификат был подтвержден пользователем как недействительный.
System.Net.Sockets Verbose: 0: [5928] Сокет # 7486778 :: Dispose ()
Ошибка System.Net: 0: [5928] Исключение в HttpWebRequest # 51319244 :: - Базовое соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS.
Ошибка System.Net: 0: [5928] Исключение в HttpWebRequest # 51319244 :: EndGetRequestStream - Основное соединение было закрыто: не удалось установить доверительные отношения для безопасного канала SSL / TLS.
Дополнительная информация
Если я использую этот код (из CodeGuru)
public static bool ValidateServerCertificate(object sender,
X509Certificate certificate, X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateChainErrors) {
return false;
} else if (sslPolicyErrors ==
SslPolicyErrors.RemoteCertificateNameMismatch) {
System.Security.Policy.Zone z =
System.Security.Policy.Zone.CreateFromUrl
(((HttpWebRequest)sender).RequestUri.ToString());
if (z.SecurityZone ==
System.Security.SecurityZone.Intranet ||
z.SecurityZone ==
System.Security.SecurityZone.MyComputer) {
return true;
}
return false;
}
return true;
}
Я в итоге получаю ошибку:
Ошибка цепочки удаленного сертификата