
我需要使用客戶端憑證呼叫伺服器 Web 服務。他們給我提供了一個 .crt 檔。我在 WindowsServer2008 IIS7 中託管我的專案。
我從右鍵單擊屬性安裝 .crt,因為我無法透過完整憑證請求將憑證新增至伺服器憑證。我收到錯誤:
CertEnroll::CX509Enrollment::p_InstallResponse: ANSI bad tag value met.
我用谷歌搜尋並沒有找到關於如何安裝 .crt 用戶端憑證的資訊。也嘗試按照解釋進行安裝這裡在第 4 步
當我這樣打電話時
string certPath = Server.MapPath("../certificate/iot01.servername.crt");
X509Certificate2 cert = new X509Certificate2(certPath);
ws.ClientCertificates.Add(cert);
res = ws.methodName(params);
我收到錯誤:System.IO.IOException:由於封包格式意外,握手失敗。在System.Net.Security.SslState.StartReadFrame(Byte []緩衝區,Int32 readBytes,AsyncProtocolRequest asyncRequest)在System.Net.Security.SslState.StartReceiveBlob(Byte []緩衝區,AsyncProtocolRequest async. SslState。緩衝區,AsyncProtocolRequest asyncRequest)在System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResultlazyResult)在System.Net.TlsStream.CallProcessAuthentication(物件狀態)在System.Threading.Net.TlsStream.CallProcessAuthentication(物件狀態)在System.Threading.Net.Contextd SyncCtx)在System。結果)在System.Net.TlsStream.Write(Byte[] 緩衝區,Int32 偏移量,Int32 大小) 在System.Net.PooledStream.Write(Byte[] 緩衝區,Int32 偏移量,Int32 大小) 在System .Net.ConnectStream.WriteHeaders(Boolean)非同步)在System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest請求)在System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResional. Protocols.SoapHttpClientProtocol.Invoke(String methodName,物件[]參數)位於......
這是否與我的憑證安裝和呼叫有關。有人能指出我哪裡出了問題嗎?
答案1
我相信這與你的使命有關:你應該遵循的步驟。
作為解決問題關鍵的強力方法,請執行以下操作:
使用完全不同的新專案建立程式碼,只是為了使用您在「此處」引用的連結中的步驟來測試有關伺服器驗證的部分。這將使您不會與其他可能妨礙您的調試能力的問題捆綁在一起。
然而,作為快速檢查,
第一次嘗試 確保使用 EXPLICIT TLS 連線來查看您是否不需要 TLS 而不是 SSL:
檢查連線物件中啟動 TLS 的任何方法 http://www.limilabs.com/blog/the-handshake-failed-due-to-an-unexpected-packet-format
client.Connect("mail.example.com");
client.StartTLS();
在您的日誌記錄中似乎有四個運行(進程 5068、3984、1628 和 7124)?後三個有用嗎?你改變了什麼嗎?
至少5068,你是發送 STLS 命令後讀取回應,但您不是讀取伺服器的初始“我還活著”行。請參閱維基百科中的例如:
S: C: S: +OK POP3 伺服器準備就緒 <[電子郵件受保護]>
所以你需要閱讀這一行,前您發送 STLS 命令。您可以在 5068 中看到,SslStream 取得 +OK B[egin SSL...] 回應而不是 SSL 回應。
後來:我現在明白發生了什麼事。在其他三個運行流中。所以能不能成功就看運氣了。
例如,我沒有在之前的範例中列印這兩行,而是列印我現在看到的兩行:
D:\Temp>SslStartTest.exe -client2 localhost 110 resp: +OK <[電子郵件受保護]>、POP3伺服器準備就緒。 resp: +OK 開始 SSL/TLS 協商... HandleLocalCertificateSelectionCallback HandleRemoteCertificateValidationCallback SslPolicyErrors: RemoteCertificateNameMismatch、RemoteCertificateChainErrors TLS 會話已連線。 :-) 密碼:TripleDes 強度 168 雜湊:Sha1 強度 160 金鑰交換:RsaSign 強度 1024 協定:Tls 是否經過驗證:作為伺服器是否正確? False IsSigned:True Is Encrypted:True 檢查憑證撤銷清單:False 本機憑證為空。遠端證書已頒發給 CN=alanjmcf.example.com,有效期為 03/04/2009 1 0:47:40 至 29/03/2029 10:47:40。可以讀取:True,寫入True 可以逾時:True ^C