Я делаю httpwebrequest использованием общедоступных Корневых полномочий файл X509 Certificat. У меня только есть открытый ключ, не закрытый ключ. Все хорошо работает из Консольного приложения, но оно не работает из приложения 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();
Вот Системные Журналы от Системы. Сеть и Система. Сетевые Сокеты.
Система. Сетевая информация: 0: [5928] SecureChannel#8106798 - цепочка сертификата не могла быть создана к доверяемым корневым полномочиям.
Система. Сетевая информация: 0: [5928] SecureChannel#8106798 - Удаленный сертификат был проверен как недопустимый пользователем.
Система. Сеть. Подробные сокеты: 0: [5928] Socket#7486778:: расположите ()
Система. Сетевая Ошибка: 0: [5928] Исключение в HttpWebRequest#51319244:: - базовое соединение было закрыто: не Мог установить доверительные отношения для безопасного канала SSL/TLS.
Система. Сетевая Ошибка: 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;
}
Я в конечном счете получаю ошибку:
Удаленная ошибка цепочки сертификата
Звучит так, как будто проблема может заключаться в том, что размещено по этой ссылке . Рабочий процесс ASPNET требует, чтобы имя сервера совпадало с именем сервера. Существуют рабочие окружения, которые могут быть реализованы в тестовом окружении.
Для генерации сертификатов вы можете использовать бесплатную программу под названием SelfSSL.exe с такими командами, как:
SelfSSL.exe /T /N:CN=localhost /V:999 /Q
(где "localhost" - имя сертификата)
И:
winHTTPCertCfg.exe -g -c local_machine\my -s localhost -a Administrators
(для предоставления администраторам доступа к сертификату)