gpt4 book ai didi

c# - Ubuntu 上 Dotnet Core 中的客户端证书

转载 作者:太空宇宙 更新时间:2023-11-03 13:24:15 25 4
gpt4 key购买 nike

all - 我编写了一个在 Windows 上完美运行的 dotnet 核心 API 集。在 Ubuntu 14.04 上,除了对使用客户端证书进行身份验证的供应商的一个 SOAP 请求外,一切正常。

请求总是超时。 Netstat 跟踪显示只有 1 个字节的数据被发送到 443 上的远程服务。100 秒内没有发生通信,然后应用程序抛出超时异常。

我已经尝试使用 openssl 导出 PEM 和 CRT 文件,并引用了这些文件以及现在配置代码的方式(带密码的 pfx)。我还将 PFX 的证书部分加载到 ca-certs 中。

代码如下:

        var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

var baseAddress = new Uri(mySettings.ClientUrl);
factory = new ChannelFactory<SingleSignOnSoap>(binding, new EndpointAddress(baseAddress));
if (RuntimeEnvironment.OperatingSystemPlatform == Platform.Windows)
{
//windows file location
factory.Credentials.ClientCertificate.Certificate = new X509Certificate2(mySettings.PrivateKeyWindowsPath, mySettings.PfxPass);
}
else
{
//linux file location
factory.Credentials.ClientCertificate.Certificate = new X509Certificate2(mySettings.ClientPrivateKeyUnixPath, mySettings.PfxPass);

}

serviceProxy = factory.CreateChannel();
RequestTicketRequest request = new RequestTicketRequest();
RequestTicketRequestBody requestBody = new RequestTicketRequestBody(xmlRequest);
request.Body = requestBody;

RequestTicketResponse response = serviceProxy.RequestTicket(request);

return response.Body.RequestTicketResult;

最佳答案

Wireshark 和 Tshark 显示身份验证实际上工作正常。发生超时是因为 ServiceFactory 正在等待接收响应,但网络已将连接重置标志 ([RST, ACK]) 发送到远程服务器。我已经能够在多个 Linux 发行版上重现,所以我在 github 上的 dotnet 核心 WCF 团队队列中添加了一个问题。

关于c# - Ubuntu 上 Dotnet Core 中的客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38310868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com