如何在ASP.NET Core 2.0中使用TLS 1.2

时间:2018-03-21 05:59:23

标签: c# salesforce asp.net-core-2.0

我的salesforce res apis工作正常,直到。突然间我开始收到身份验证错误。 重试您的请求。 Salesforce.Common.AuthenticationClient.d__1.MoveNext()

salesforce告知它将从现在开始使用TLS .1.2。如何强制我的asp.net核心2.0在Startup.cs中使用TLS 1.2。下面是我的登录代码。

 private async Task<AuthenticationClient> GetValidateAuthentication()
        {
            RestApiSetting data = new RestApiSetting(Configuration);
            var auth = new AuthenticationClient();
            var url = data.IsSandBoxUser.Equals("true", StringComparison.CurrentCultureIgnoreCase)
                ? "https://test.salesforce.com/services/oauth2/token"
                : "https://login.salesforce.com/services/oauth2/token";
            try
            {
                //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                await auth.UsernamePasswordAsync(data.ConsumerKey,
                data.ConsumerSecret, data.Username, data.Password, url);
                return auth;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

2 个答案:

答案 0 :(得分:1)

默认情况下,版本4.7之前的

.net框架使用TLS 1.0建立出站连接。您可以升级到较新的版本来解决此问题,或者,可以使用ServicePointManager为拨出电话设置默认和后备版本,或者,如果您具有库的源代码,则将该设置传递到HttpClient中。

在管道的早期位置添加以下内容,例如startup.csglobal.asax

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

您可以在此处找到关于该主题的详细说明:https://social.msdn.microsoft.com/Forums/en-US/8db54c83-1329-423b-8d55-4dc6a25fe826/how-to-make-a-web-client-app-use-tls-12?forum=csharpgeneral

如果您只为某些请求而不是整个应用程序指定它,则可以自定义HttpClientHandler中的HttpClient

var handler = new HttpClientHandler
{
    SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls11 | SslProtocols.Tls
};

HttpClient client = new HttpClient(handler);
...

答案 1 :(得分:1)

根据以下内容 https://github.com/dotnet/corefx/issues/29452

  

在.NET Core中,ServicePointManager仅影响HttpWebRequest。它不会影响HttpClient。您应该可以使用HttpClientHandler.ServerCertificateValidationCallback来实现相同的目的。