#c# #ssis
#c# #ssis
Вопрос:
Я интегрируюсь с веб-сервисом через SSIS. Я продолжаю получать сообщение об ошибке, которое, по-видимому, связано с невозможностью установить связь с сертификатом.
Когда я запускаю точно такой же код только в консоли, он работает нормально.
Службе не требуется сертификат, так что это SSIS? Я новичок в службах SSIS, поэтому это может быть основной проблемой.
Исключение:
System.ServiceModel.Security.SecurityNegotiationException: Could not establish secure channel for SSL/TLS with authority 'myurl'. --->
System.Net.WebException: запрос был прерван: не удалось создать безопасный канал SSL / TLS
Код ниже:
var wsBinding = new WSHttpBinding(SecurityMode.Transport);
wsBinding.Name = "wsHttpBinding_GlobalCredentials";
wsBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
EndpointAddress endpointAddress = new EndpointAddress("https://myurl/myservice.svc/Soap12_NoAuth");
using (GlobalCredentialsClient globalCredentialsClient = new GlobalCredentialsClient(wsBinding, endpointAddress))
{
try
{
globalCredentialsClient.ChannelFactory.Credentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication();
globalCredentialsClient.ChannelFactory.Credentials.ServiceCertificate.SslCertificateAuthentication.CertificateValidationMode = X509CertificateValidationMode.None;
GlobalAccount checkCredentialsResult = globalCredentialsClient.CheckCredentials(username, password);
MessageBox.Show("Result: " checkCredentialsResult.OrgID.ToString());
Dts.Variables["sOrgName"].Value = checkCredentialsResult.Created;
globalCredentialsClient.Close();
}
catch (CommunicationException ce)
{
MessageBox.Show("Comms exc " ce.ToString());
globalCredentialsClient.Abort();
}
}
Ответ №1:
Просто догадка, это может быть несоответствие между версиями TLS. Что .NET — это приложение, которое выходит из строя?
Вы можете попробовать установить версию TLS прямо перед вызовом API.
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
или
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11
Комментарии:
1. Не используйте TLS11, он отключен и не будет работать.
2. @jdweng я полностью согласен. Хотя иногда вам необходимо поддерживать устаревшие системы
3. Пять лет назад отрасль решила исключить TLS 1.0 / 1.1, потому что хакеры смогли расшифровать сообщения. Наконец, в июне этого года Microsoft выпустила обновление для системы безопасности на сервере, на котором отключен протокол TLS 1.0 / 1.1. Поскольку обновление для системы безопасности было запущено, все были вынуждены обновиться до 1.2 / 1.3, если они этого не делали за последние 5 лет. Очень маловероятно, что кто-либо все еще использует TLS 1.0 / 1.1. Выход из TLS 1.1 может привести к возникновению исключений при сбое.