Добавление сертификата TLS в запрос API с исключением: запрос был прерван: не удалось создать безопасный канал SSL/TLS

Чтобы иметь возможность использовать некоторые API, я должен использовать сертификат TLS (в версии 1.1).

Мой код выглядит так:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://someapi/request/");

request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = Encoding.UTF8.GetByteCount(postData);
request.KeepAlive = false;

request.ProtocolVersion = HttpVersion.Version11;

ServicePointManager.Expect100Continue = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

X509Certificate2 certificate = new X509Certificate2(@"d:\TLScertificate.p12", "password");  

X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);

try
{
    store.Open(OpenFlags.ReadWrite);

    if (!store.Certificates.Contains(certificate))
    {
        store.Add(certificate);
    }

    int indexOfCertificate = store.Certificates.IndexOf(certificate);
    certificate = store.Certificates[indexOfCertificate];
}
finally
{
    store.Close();
}

request.ClientCertificates.Add(certificate);
request.PreAuthenticate = true;

using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) // Exception
{
}

Во время request.GetResponse() я всегда получаю исключение: запрос был прерван: не удалось создать безопасный канал SSL/TLS.

Провайдер ответил мне, что:

Там должно быть,

Root Ca v1 test.pem в вашем Truststore и TLSCertificate в вашем Keystore

Посоветуйте, пожалуйста, что мне делать с файлом .pem? Его нужно добавить в запрос, как и файл TLScertificate.p12? Когда я добавляю в запрос второй X509Certificate2 (без пароля), я все равно получаю ту же ошибку.


person user3146344    schedule 01.02.2016    source источник


Ответы (1)


Во-первых, вы можете использовать загруженный сертификат сразу на запрос

   X509Certificate2 certificate = new X509Certificate2(@"d:\TLScertificate.p12", "password");
    request.ClientCertificates.Add(certificate);

Файл pem должен быть импортирован на ваши компьютеры. KeyStore mmc -> File -> Add/Remove Snap-in -> Certificates.

Это может помочь преобразовать pem в crt

person dave000    schedule 01.02.2016
comment
Но когда я устанавливаю TLScertificate.p12, ROOT CA.pem также устанавливается автоматически, и я вижу его в доверенных корневых центрах сертификации в mmc. Тем не менее, я получаю то же исключение... - person user3146344; 01.02.2016
comment
Попробуйте это, чтобы убедиться, что ваша машина принимает удаленный сертификат request.ServerCertificateValidationCallback = certcallback; private static bool certcallback( object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors) { return true; } Если после этого у вас все еще есть проблемы, возможно, вам дали неверный сертификат... У меня была такая же проблема. Отладил за один день... - person dave000; 01.02.2016
comment
Я добавил этот обратный вызов, к сожалению, исключение такое же. - person user3146344; 01.02.2016
comment
Извините... без понятия, но вы можете попробовать это: ssl-tls-sec" title="httpwebrequest приводит к тому, что запрос был прерван, не удалось создать ssl tls sec"> stackoverflow.com/questions/5112515/ - person dave000; 01.02.2016