【问题标题】:Certificate Validation Error When Invoking Azure Cognitive Search API调用 Azure 认知搜索 API 时出现证书验证错误
【发布时间】:2021-01-06 04:09:51
【问题描述】:

我们有一个 ASP.Net MVC 应用程序,它调用 Azure 认知搜索 API 来执行搜索。该应用程序部署在运行 IIS 的 Azure VM 中。调用 ACS API 时,我们收到以下错误:

System.Net.Http.HttpRequestException:发送请求时出错。 ---> System.Net.WebException:底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。 ---> System.Security.Authentication.AuthenticationException:根据验证程序,远程证书无效。 在 System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) 在 System.Net.ConnectStream.WriteHeadersCallback(IAsyncResult ar) --- 内部异常堆栈跟踪结束 --- 在 System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult,TransportContext& 上下文) 在 System.Net.Http.HttpClientHandler.GetRequestStreamCallback(IAsyncResult ar) --- 内部异常堆栈跟踪结束 ---

如果我通过 Postman 从同一子网中的 Azure 开发人员 VM 调用 ACS API,它可以正常工作。

【问题讨论】:

    标签: azure-cognitive-search


    【解决方案1】:

    问题

    您可能正在运行旧的操作系统映像或在您的虚拟机上禁用了 Windows 更新,这会阻止最新的中间和根证书颁发机构更新。

    解决方案

    在您的 VM 上运行 Windows 更新,或使用最新的 Azure VM 操作系统映像。

    您可以通过检查 VM 上的证书存储来验证您是否拥有最新的中间证书颁发机构。具体来说,您正在寻找“Microsoft Azure TLS Issuing CA 01”,它是 Azure 认知搜索和大多数 Azure 服务正在使用的中间证书颁发机构。

    Manage User Certificates -> Intermediate Certification Authorities -> Certificates -> "Microsoft Azure TLS Issuing CA 01"
    

    【讨论】:

    • 感谢您的信息。安装您上面提到的证书后,我仍然遇到同样的错误。但是,我注意到 Postman 的相同查询没有问题,并且 Postman 配置为执行证书验证。还有什么我可能会丢失的吗?这是调用请求的代码
    • var response = new HttpResponseMessage();使用 (var RESTApiClient = new HttpClient(clientHandler)) { var request = new HttpRequestMessage(HttpMethod.Get, searchUrl); request.Headers.Add("api-key", apiKey); request.Headers.Add("接受", "application/json");响应 = RESTApiClient.SendAsync(request).Result; Console.WriteLine("成功"); }
    • 经过进一步审查,Postman 没有执行证书验证,我们也缺少用于搜索的根 CA。将根 CA 添加到服务器后,一切都按预期工作。感谢@tyjen 的帮助。
    猜你喜欢
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多