- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Linux 操作系统中运行的 azure 函数应用程序(C#)中使用 HttpClient 进行 https 调用。
证书(.cer)是 CA 签名的中间证书(具有链到根证书),上传到 Function App 的公共(public)证书中,以便在函数应用程序中使用。
这是我用来创建 HttpClient 的函数应用程序代码:
static HttpClient GetHttpClient()
{
string certificatePath = "var/ssl/certs/certificatethumprint.der";
if (certificatePath == null) {
throw new Exception("Environment Variable is null");
}
HttpClient httpClient = null;
var bytes = File.ReadAllBytes(certificatePath);
X509Certificate2 cert = new(bytes);
handler = new HttpClientHandler();
handler.ClientCertificates.Add(cert);
if (handler != null)
{
httpClient = new HttpClient(handler);
}
return httpClient;
}
这是使用 httpClient 的代码:
static HttpClient httpClient = GetHttpClient();
HttpRequestMessage httpWebRequest = GetHttpRequest(messageBody, log);
HttpResponseMessage response = null;
try {
response = await httpClient.SendAsync(httpWebRequest);
}
Get HttpRequest 返回带有请求参数的 HttpRequest。
当我使用上面的代码时,我收到此异常:
Exception occurred during http call:The SSL connection could not be established, see inner exception.stackTrace: at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream stream, CancellationToken cancellationToken)at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)at System.Net.Http.HttpConnectionPool.AddHttp11ConnectionAsync(HttpRequestMessage request)at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken)at System.Net.Http.HttpConnectionPool.GetHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)at System.Net.Http.DiagnosticsHandler.SendAsyncCore(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)at Function.FunctionApp.FunctionApp.Method(Parameter parameter) in /opt/vsts-agent-linux-x64-2.173.0.tar.gz/_work/1/s/Function/Function.FunctionApp/FunctionApp.cs:line 116type: System.Net.Http.HttpRequestExceptionInnerException: System.Security.Authentication.AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: PartialChainat System.Net.Security.SslStream.SendAuthResetSignal(ProtocolToken message, ExceptionDispatchInfo exception)at System.Net.Security.SslStream.CompleteHandshake(SslAuthenticationOptions sslAuthenticationOptions)at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm)at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream stream, CancellationToken cancellationToken)
异常消息:
无法建立 SSL 连接,请参阅内部异常。 ---> System.Security.Authentication.AuthenticationException:由于证书链中的错误,远程证书无效:PartialChain
我不想使用下面的代码强制验证证书,因为我需要在生产中部署它,并且这不是生产环境的最佳实践:
handler = new HttpClientHandler
{
ClientCertificateOptions = ClientCertificateOption.Manual,
ServerCertificateCustomValidationCallback =
(httpRequestMessage, cert, cetChain, policyErrors) =>
{
return true; //Not a best practice/ not safe
},
SslProtocols = SslProtocols.Tls12
};
任何建议/帮助将不胜感激。
根据建议,当我没有使用任何证书从客户端进行 https 调用时,我收到此异常:
Error when sending the http request: The SSL connection could not be established, see inner exception.Information2022-11-23 19:11:56.999System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: PartialChain at System.Net.Security.SslStream.SendAuthResetSignal(ProtocolToken message, ExceptionDispatchInfo exception) at System.Net.Security.SslStream.CompleteHandshake(SslAuthenticationOptions sslAuthenticationOptions) at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm) at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream stream, CancellationToken cancellationToken) --- End of inner exception stack trace --- at System.Net.Http.ConnectHelper.EstablishSslConnectionAsync(SslClientAuthenticationOptions sslOptions, HttpRequestMessage request, Boolean async, Stream stream, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.AddHttp11ConnectionAsync(HttpRequestMessage request) at System.Threading.Tasks.TaskCompletionSourceWithCancellation`1.WaitWithCancellationAsync(CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.GetHttp11ConnectionAsync(HttpRequestMessa
最佳答案
当您连接到安全服务器时,只有服务器需要证书。我不完全理解你对 HttpClient 和服务器做了什么,但至少在 GetHttpClient() 中,我认为不需要自己设置证书。希望这有帮助!
关于c# - 使用公共(public)中间证书获取 Azure Function App 到 https(APIM) 端点调用的部分链异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74524641/
在我的 azure devops 管道中,我有一个任务 AzureCLI@2,它将 api 部署到 apim。我如何使用 az apim api 来执行相同的任务更新api?我知道有一个操作可以做到这
我理解当请求包含 Ocp-Apim-Trace: true 时,如下所示: GET /api/v1/BotConfig HTTP/1.1 Host: xyz.azure-api.net Cache-C
我理解当请求包含 Ocp-Apim-Trace: true 时,如下所示: GET /api/v1/BotConfig HTTP/1.1 Host: xyz.azure-api.net Cache-C
我已经创建了 web api 并尝试使用 c# 发出 GET 请求,如下所示 namespace APIMCheck { class Program { static void Main(
我想在 Azure API 管理策略中实现客户端证书验证,以检查客户端是否具有有效证书(按照以下文档)。 https://learn.microsoft.com/en-us/azure/api-man
我有一个带有自定义域和多个 API 的 azure APIM,如下面的屏幕截图所示:- 每个 API 下都有多个端点,并且所有端点都具有相同的主机名。自定义域级别有一个协商客户端证书 设置,我只想为其
我最近将 APIM 实例从开发人员层更改为消费层,并且在验证内容策略中看到了一些奇怪的行为。在开发人员层,此策略将按预期工作并返回 400 错误以及相应的错误消息。 以下是政策: 下面是来
我目前仍在 APIM 中探索。我在有效负载 #1 中有一个有效负载,我想将其转换为另一个有效负载 #2(预期)。 我将如何编辑我的策略来构建此有效负载? 有效负载1 { "dependtee_
我正在尝试通过 APIM 将文件批量上传到 Azure 存储帐户。在本地,我可以使用 REST API 将文件上传到 azure 存储帐户。但是,通过 APIM 我无法上传文件。我收到 401 错误。
在我的口腔中,我有查询参数调用“PageSize”,我需要检查用户输入情况比较严重,需要向用户显示消息 比我在出站部分中放置的 = 20">
来自Azure API management pricing page我发现除了开发人员层和高级层之外,不支持虚拟网络。 目前,在配置 APIM 的 VN 时,我的开发人员级别订阅可以在“关闭”、“外
我在 Azure API 管理中有以下策略。这样就可以正常工作了: @{ try { // ... doing something
我正在尝试通过 Azure APIM 访问本地 API。如果我使用 VNET 和 VPN 隧道,我可以访问 On-Prem API,但是,这不是一个理想的解决方案。我正在尝试让混合连接(端口桥)以相同
有没有办法将通过 APIM 请求传入的查询参数作为路径参数传递给后端服务调用?例如: 对于以下 API 调用 base_url/a/{pathParam1}?query=Qvalue 我想将 URL
目前我已经创建了一个 Azure APIM 实例,URL 如下所示。 https://abc-test.azure-api.net 我想使用此 APIM 实例来支持开发和 QA 环境。所以我想设置如下
我正在尝试处理后端 API(REST),没有可通过 Azure APIM 访问的 swagger 文档。我希望所有调用都定向到后端 API,而不是为所有资源手动创建 GET/PUT/POST。我的所有
来自Azure API management pricing page我发现除了开发人员层和高级层之外,不支持虚拟网络。 目前,在配置 APIM 的 VN 时,我的开发人员级别订阅可以在“关闭”、“外
我在 Azure API 管理中有以下策略。这样就可以正常工作了: @{ try { // ... doing something
我正在尝试通过 Azure APIM 访问本地 API。如果我使用 VNET 和 VPN 隧道,我可以访问 On-Prem API,但是,这不是一个理想的解决方案。我正在尝试让混合连接(端口桥)以相同
有没有办法将通过 APIM 请求传入的查询参数作为路径参数传递给后端服务调用?例如: 对于以下 API 调用 base_url/a/{pathParam1}?query=Qvalue 我想将 URL
我是一名优秀的程序员,十分优秀!