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

C# Ubuntu上Dotnet Core中的客户端证书,c#,ubuntu,ssl,asp.net-core,C#,Ubuntu,Ssl,Asp.net Core,我已经编写了一个dotnet核心API集,它在windows上可以完美地运行。在Ubuntu14.04上,除了向使用客户端证书进行身份验证的供应商发出一个SOAP请求外,其他一切都可以正常工作 请求总是超时。Netstat跟踪显示只有1字节的数据被发送到443上的远程服务。100秒内没有通信,然后应用程序抛出超时异常 我曾尝试使用openssl导出PEM和CRT文件,并引用了这些文件以及现在配置代码的方式(pfx w/password)。我还将PFX的证书部分加载到ca证书中 代码如下:

我已经编写了一个dotnet核心API集,它在windows上可以完美地运行。在Ubuntu14.04上,除了向使用客户端证书进行身份验证的供应商发出一个SOAP请求外,其他一切都可以正常工作

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

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

代码如下:

        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;
var binding=new BasicHttpBinding();
binding.Security.Mode=BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType=HttpClientCredentialType.Certificate;
var baseAddress=新Uri(mySettings.ClientUrl);
工厂=新的ChannelFactory(绑定,新的端点地址(基地址));
if(RuntimeEnvironment.OperatingSystemTemplateForm==Platform.Windows)
{
//windows文件位置
factory.Credentials.ClientCertificate.Certificate=新的X509Certificate2(mySettings.PrivateKeyWindowsPath,mySettings.PfxPass);
}
其他的
{
//linux文件位置
factory.Credentials.ClientCertificate.Certificate=新的X509Certificate2(mySettings.ClientPrivateKeyUnixPath,mySettings.PfxPass);
}
serviceProxy=factory.CreateChannel();
RequestTicketRequest=新的RequestTicketRequest();
RequestTicketRequestBody requestBody=新的RequestTicketRequestBody(xmlRequest);
request.Body=requestBody;
RequestTicketResponse响应=serviceProxy.RequestTicker(请求);
返回response.Body.RequestTicketResult;

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

我没有将其包含在代码中,但url确实使用了https://Also 尝试使用BasicHttpsBinding,但无效