我想请求解释。我正在使用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;
}
答案 0 :(得分:0)
在SSL握手期间,客户端将其公钥呈现给另一方,这显然没有发生。
我不是C#程序员,所以我无法向您提供代码。但是您需要创建一个SSL密钥对(私钥+公钥对)并使用它来定义您的SSL套接字等。
答案 1 :(得分:0)
SSL有可能要求客户端验证。因此,客户端(您的应用程序)必须在建立连接之前发送服务器信任的证书。似乎此客户端验证失败,因为您的应用程序未发送此类证书。
根据您尝试使用的Web服务,将无法创建此类证书,因为服务器仅信任来自例如的应用程序。某个公司。