SSL握手期间未提供客户端证书

时间:2016-03-02 11:15:27

标签: c# ssl certificate x509 handshake

我想请求解释。我正在使用X.509 certificate,当我尝试将数据发布到我想要与之通信的webservice时,我收到以下错误:"

  

SSL握手期间未提供任何客户证书

你可以解释一下我的问题是什么吗?

注意:我正在使用.NET Framework 3.5 / C#

我的确做的是:首先我将证书导入商店,然后我使用下面的代码找到它然后收到令牌(使用AskForToken函数)。但是,当我发送数据时,我的握手失败了。

我的第一个问题是为什么我成功获得令牌(如果我没有弄错,客户端(这是我的应用程序)将证书发送到服务器并获得令牌,这意味着连接已经完成)?< / p>

我的第二个问题是,我需要更改或检查以摆脱握手失败。

private static string RequestSecurityToken()
        {
            WSTrustChannelFactory trustChannelFactory = new Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannelFactory(
                        new CertificateWSTrustBinding(SecurityMode.TransportWithMessageCredential),
                        new EndpointAddress(new Uri(stsAddress)));

            trustChannelFactory.TrustVersion = TrustVersion.WSTrust13;

            string thumb = "fe14593dd66b2406c5269d742d04b6e1ab03adb1";
            trustChannelFactory.Credentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindByThumbprint, thumb);
            trustChannelFactory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.PeerOrChainTrust;
            cert = trustChannelFactory.Credentials.ClientCertificate.Certificate;

            var tokenString = AskForToken(serviceURL, trustChannelFactory);
            trustChannelFactory.Close();
            return tokenString;
        }

2 个答案:

答案 0 :(得分:0)

在SSL握手期间,客户端将其公钥呈现给另一方,这显然没有发生。

我不是C#程序员,所以我无法向您提供代码。但是您需要创建一个SSL密钥对(私钥+公钥对)并使用它来定义您的SSL套接字等。

答案 1 :(得分:0)

SSL有可能要求客户端验证。因此,客户端(您的应用程序)必须在建立连接之前发送服务器信任的证书。似乎此客户端验证失败,因为您的应用程序未发送此类证书。

根据您尝试使用的Web服务,将无法创建此类证书,因为服务器仅信任来自例如的应用程序。某个公司。