Stripe Payment: System. Net .WebException: запрос был прерван: не удалось создать безопасный канал SSL / TLS - PullRequest
2 голосов
/ 28 февраля 2020

Я использую C# rest API с WebAPI 2.0; Есть очень мало запросов, генерирующих это исключение. Найдите следующие детали:

. net версия: 4.0 Stripe. net версия: 34.20.0.0 Журнал исключений:

2020-02-18 06:47:45.4533|DEBUG|Services.impl.StripePaymentChargeService|System.Net.WebException: The 

request was aborted: Could not create SSL/TLS secure channel.
   at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
   at System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar)
2020-02-18 06:47:45.4533|DEBUG|Services.impl.StripePaymentChargeService|   at Stripe.SystemNetHttpClient.<MakeRequestAsync>d__21.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Stripe.StripeClient.<RequestAsync>d__25`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Stripe.Service`1.<RequestAsync>d__24`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at Stripe.Service`1.Request[T](HttpMethod method, String path, BaseOptions options, RequestOptions requestOptions)
   at Stripe.ChargeService.Create(ChargeCreateOptions options, RequestOptions requestOptions)

Что я пробовал:

1. ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
           | SecurityProtocolType.Tls11
           | SecurityProtocolType.Tls12
           | SecurityProtocolType.Ssl3;



2.  ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

                System.Net.ServicePointManager.ServerCertificateValidationCallback +=
                        delegate (object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                                               System.Security.Cryptography.X509Certificates.X509Chain chain,
                                               System.Net.Security.SslPolicyErrors sslPolicyErrors)
                        {
                            return true; 

                        };

3. ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

            System.Net.ServicePointManager.ServerCertificateValidationCallback +=
                    delegate (object sender, System.Security.Cryptography.X509Certificates.X509Certificate certificate,
                                           System.Security.Cryptography.X509Certificates.X509Chain chain,
                                           System.Net.Security.SslPolicyErrors sslPolicyErrors)
                    {
                        return true; 
                    };

Stripe Создать код оплаты:

 stripeCharge = chargeService.Create(myCharge);

Я не могу обновить версию. net из-за производственной зависимости. Любая помощь будет оценена.

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

Я думаю, что у вас есть решение здесь, а не проголосовавший ответ, а тот, который находится под ним:

TLS 1,2 дюйма NET Framework 4.0

По сути, вы должны добавить эту строку при запуске приложения и убедиться, что на целевом компьютере установлен .net4.5:

ServicePointManager.SecurityProtocol = (SecurityProtocolType) 768 | (SecurityProtocolType) 3072;

* Платежный шлюз STRIPE поддерживает только TLS 1.1, TLS 1.2.

0 голосов
/ 07 марта 2020

Если ваша ОС старая и не поддерживает TLS, вам также необходимо обновить ОС. Затем код должен быть обновлен до. net 4.5 или выше. Если вы не можете обновить. net Framework до 4.5, у меня есть более сложное решение для вас. Преобразуйте код в ASp. net ядро, использующее автономное развертывание. https://gunnarpeipman.com/visual-studio-publish-self-contained-aspnet-core-azure-appservice/

Создайте базовое решение. net, которое оно может запустить в своем автономном контейнере Publi sh. https://docs.microsoft.com/en-us/dotnet/core/deploying/

Итак, у вас есть. net 4.5 решение с операционной системой без. net 4.5. Publi sh автономный Публикация вашего приложения как автономного создает специфичный для платформы исполняемый файл c. Выходная папка публикации содержит все компоненты приложения, включая библиотеки. NET Core и целевую среду выполнения. Приложение изолировано от других. NET основных приложений и не использует локально установленную общую среду выполнения. Пользователю вашего приложения не требуется загружать и устанавливать. NET Core.

Выполняемый двоичный файл создается для указанной целевой платформы. Например, если у вас есть приложение с именем word_reader и вы опубликовали sh автономный исполняемый файл для Windows, будет создан файл word_reader.exe. При публикации для Linux или macOS создается файл word_reader. Целевая платформа и архитектура указываются с помощью параметра -r для команды do tnet publi sh. Для получения дополнительной информации о RID см. NET Core RID Catalog.

Если приложение имеет зависимости от платформы c, такие как пакет NuGet, содержащий зависимости платформы c, они копируются. в папку publi sh вместе с приложением.

...