我想問一下解釋。我使用X.509 certificate
,當我試圖在我的數據發佈到一個webservice
,我想,我收到以下錯誤溝通:「SSL握手期間未提供客戶端證書
No client certificate was presented during SSL Handshake
可以請您給我解釋一下什麼是問題
注:我使用.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;
}
謝謝@DerKasper的回答,您可以在我發送證書的代碼中看到。任何想法可能是什麼問題。 謝謝 –
@ R.You:我不知道ChannelFactory的工作方式,只是ssl如何工作,但我的方法是: - 首先檢查您的代碼是否不僅發送證書,而且是真正從您的PC。使用Wireshark(對於ssl使用過濾器),因爲您應該使用證書請求從服務器中找到消息,並應找到客戶端發送證書。 如果發送證書,則問題不在應用程序中,而在服務器中,該服務器拒絕您的證書。服務器將不得不被改變,以便他接受你的證書。你能從任何應用程序連接到服務器嗎? – DerKasper
謝謝@DerKasper,不幸的是我無法從任何應用程序連接到服務器。 我使用Wireshark的,你建議報告,並逮住交流的順序如下: 1)_ **客戶你好** _ 2)_ **服務器你好** _ 3)_ **認證** _ 4)_ **證書請求,服務器問候完成** _ 5)_ **證書,客戶端密鑰交換,變更密碼說明,加密握手消息** _ 6)_ **更改密碼規範,加密的握手消息** _。 你能解釋一下這是什麼意思?它有助於解決我的問題嗎? –