【问题标题】:The SSL connection could not be established. The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot无法建立 SSL 连接。由于证书链中的错误,远程证书无效:UntrustedRoot
【发布时间】:2022-10-19 18:07:10
【问题描述】:

我正在尝试向 Web API 提交请求。我正在使用 C# 使用 Azure App Services 编写 Web API。此代码执行请求:

    _objClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("basic", credential);
    var multipartFormContent = new MultipartFormDataContent();
    multipartFormContent.Add(new StringContent(product.Name), name: "name");
    multipartFormContent.Add(new StringContent(product.Price), name: "price");
    MemoryStream ms = new(product.catalogue);
    var fileStreamContent = new StreamContent(ms);
    fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    multipartFormContent.Add(fileStreamContent, name: "content", fileName: product.Name);
    var response = _objClient.PostAsync(_settings.UploadProductCatalogueUrl, multipartFormContent).GetAwaiter().GetResult();

调用 PostAsync 方法会返回此错误:

异常消息:无法建立 SSL 连接,请参阅内部异常。

内部异常:由于证书链中的错误,远程证书无效:UntrustedRoot。

堆栈跟踪:在 System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions,HttpRequestMessage 请求,布尔异步,流流,CancellationToken cancelToken)\r\n 在 System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken) \r\n 在 System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken)\r\n 在 System.Net.Http.HttpConnectionPool.AddHttp11ConnectionAsync(HttpRequestMessage 请求)\r\n 在 System.Threading .Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)\r\n 在 System.Net.Http.HttpConnectionPool.GetHttp11ConnectionAsync(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken)\r\n 在 System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync (HttpRequestMessage 请求,布尔异步,布尔doRequestAuth, CancellationToken cancelToken)\r\n 在 System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage 请求, 布尔异步, CancellationToken cancelToken)\r\n 在 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage 请求, 布尔异步, CancellationToken cancelToken)\r\n 在 Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancelToken)\r\n 在 Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancelToken)\ r\n 在 System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage 请求,HttpCompletionOption completionOption,CancellationTokenSource cts,布尔 disposeCts,CancellationTokenSource pendingRequestsCts,CancellationToken originalCancellationToken)\r\n 在 ProductCatalogue.UploadProductCatalogue(CatalogueDto 目录)

它在本地运行时确实有效,只有在部署到 Azure 时才会失败。

【问题讨论】:

    标签: c# azure-web-app-service


    【解决方案1】:

    对我有用的是调用配置PrimaryHttpMessageHandler对于 HttpClient,并重载ServerCertificateCustomValidationCallback方法,返回true:

        private static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            builder.Services.AddHttpClient("ProductCatalogueClient",
                client =>
                {
                    client.BaseAddress = new Uri(builder.Configuration["Settings:productCatalogueUrl"]);
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(MediaTypeNames.Application.Json));
                }
            )
            .ConfigurePrimaryHttpMessageHandler(configure =>
                new HttpClientHandler()
                {
                    ServerCertificateCustomValidationCallback = (message, cert, chain, sslPolicyErrors) =>
                    {
                        return true;
                    }
                });
    

    意识到这绕过了证书验证,在我们的情况下这没问题,但它可能会在您的情况下产生安全问题。

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 2021-05-20
      • 2022-01-12
      • 2023-01-25
      • 2020-02-01
      • 1970-01-01
      • 2016-12-12
      • 2014-06-13
      • 1970-01-01
      相关资源
      最近更新 更多