我想问解释一下。我正在使用X.509 certificate
,当我尝试将数据发布到我要与之通信的webservice
时,出现以下错误:"
SSL 握手期间未提供客户端证书
你能解释一下问题是什么吗?
注意:我正在使用.NET Framework 3.5 / C#
我所做的是:首先我将证书导入存储,然后我使用下面的代码来找到它,然后接收令牌(使用 AskForToken 函数)。但是,当我发送数据时,握手失败。
我的第一个问题是为什么我成功获得令牌(如果我没记错的话,客户端(这是我的应用程序)将证书发送到服务器并获得了令牌,这意味着连接已经完成得很好)?
我的第二个问题,我必须更改或检查什么才能摆脱这种握手失败。
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 有可能要求客户端身份验证。因此,在建立连接之前,客户端(您的应用程序)必须发送服务器信任的证书。此客户端身份验证似乎失败,因为您的应用程序未发送此类证书。
根据您尝试使用的Web服务,将无法创建此类证书,因为服务器仅信任来自某个公司的应用程序。
在SSL握手期间,客户端将其公钥提供给另一方,这显然没有发生。
我不是 C# 程序员,所以我无法为您提供代码。但是您需要创建一个SSL密钥对(私钥+公钥对)并使用它来定义SSL套接字等。