c# - .NET 核心 HttpClient - "A security error occurred"HttpRequestException

标签 c# ssl https .net-core

我正在尝试使用 .NET Core 和 C# 向我的 Vizio TV 发出 HTTPS 请求,该 API 有一些文档记录 here .

在 Chrome 中访问 HTTP 服务器时,我收到“NET::ERR_CERT_AUTHORITY_INVALID”错误。当我在 C# 中使用 HttpClient 发出请求时,将抛出 HttpRequestException。我试过将证书添加到 Windows,但我对 TLS 还不够熟悉。

我也不担心我的通信被窥探,所以我想忽略任何 HTTPS 错误。

这是我正在使用的相关代码。

public async Task Pair(string deviceName) {
    using (var httpClient = new HttpClient())
    try {
        httpClient.BaseAddress = new Uri($"https://{televisionIPAddress}:9000/");

        // Assume all certificates are valid?
        ServicePointManager.ServerCertificateValidationCallback =
            (sender, certificate, chain, sslPolicyErrors) => true;

        deviceID = Guid.NewGuid().ToString();

        var startPairingRequest = new HttpRequestMessage(HttpMethod.Put, "/pairing/start");
        startPairingRequest.Content = CreateStringContent(new PairingStartRequestBody {
            DeviceID = deviceID,
            DeviceName = deviceName
        });

        var startPairingResponse = await httpClient.SendAsync(startPairingRequest); // HttpRequestException thrown here
        Console.WriteLine(startPairingResponse);
    } catch (HttpRequestException e) {
        Console.WriteLine(e.InnerException.Message); // prints "A security error occurred"
    }
}

StringContent CreateStringContent(object obj) {
    return new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json");
}

最佳答案

通过设置 HttpClientHandler 并将 ServerCertificateCustomValidationCallback 设置为返回 true 解决了这个问题。

using (var handler = new HttpClientHandler {
    ServerCertificateCustomValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true
})
using (var httpClient = new HttpClient(handler))

关于c# - .NET 核心 HttpClient - "A security error occurred"HttpRequestException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351595/

相关文章:

c# - Entity Framework 5 中的 LoadProperty

apache - 为什么 Google 不通过 SSL 提供 adsense?

apache - SSLCACertificateFile 和 SSLCertificateChainFile 之间的区别

java - 如何从 Android 进行安全的 HTTPS 调用

c# - CodeDom 如何创建具有 void 返回类型的方法?

c# - LINQ to Entities 查询数据表

apache - 在本地主机上禁用 https

java - 为下载管理器添加 HTTPS 支持

java - 如何在 Java 中使用 X.509 证书签署 HTTP 请求?

c# - Protobuf-net r282 在反序列化使用 r249 序列化的对象时出现问题