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

No client certificate was presented during SSL Handshake

我想请教一下。我正在使用 X.509 certificate,当我尝试 post 我的数据到我想与之通信的 webservice 时,我收到以下错误:“

No client certificate was presented during SSL Handshake

你能解释一下这是什么问题吗?

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

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

我的第一个问题是为什么我成功获取到token(如果我没有记错的话,客户端(也就是我的应用程序)将证书发送到服务器并获取到token,这意味着连接已经成功) ?

我的第二个问题,我必须更改或检查什么才能摆脱这种握手失败。

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;
        }

在 SSL 握手期间,客户端向另一方提供它的 public 密钥,这显然没有发生。

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

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

根据您尝试使用的网络服务,将不可能创建这样的证书,因为服务器只信任来自例如某公司