2011-08-22 150 views
0

我訪問它的SSL認證的web服務器託管的webserivce https://www.example.net/somewebservice/somemethod.asmx這是HTTPS服務器上託管的訪問web服務

但是,當我創建一個代理類,並使用C#使用它:我收到此錯誤

事件類型:錯誤 事件源:XXXX 事件類別:無 事件ID:0 日期:22/08/2011 時間:14時15分53秒 用戶:N/A 計算機:XXXX 描述: System.Net.WebException:底層連接已關閉:無法建立SSL/TLS安全通道的信任關係。 ---> System.Security.Authentication.AuthenticationException:根據驗證過程,遠程證書無效。 在System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken消息,AsyncProtocolRequest asyncRequest,異常的異常) 在System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken消息,AsyncProtocolRequest asyncRequest) 在System.Net.Security.SslState.StartSendBlob (Byte [] incoming,Int32 count,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte [] buffer,Int32 count,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReadFrame(Byte []緩衝區,Int32 readBytes,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte [] buffer,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken消息,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte [] incoming,Int32 count,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.ProcessReceivedBlob(Byte [] buffer,Int32 count,AsyncProtocolRequest asyncRequest ) at System.Net.Security.SslState.StartReadFrame(Byte [] buffer,Int32 readBytes,AsyncProtocolRequest asyncRequest) at System.Net.System.Net.Security.SslState.StartReceiveBlob(Byte [] buffer,AsyncProtocolRequest asyncRequest) 。 Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken消息,AsyncProtocolRequest異步請求) at System.Net.SecurityBlocks(Byte [],緩衝區,Int32計數,AsyncProtocolRequest異步請求) at System.Net.Security.SslState.StartReadFrame(Byte [] buffer,Int32 readBytes,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiveBlob(Byte [] buffer,AsyncProtocolRequest asyncRequest ) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte [] incoming,Int32 count,AsyncProtocolRequest asyncRequest) at System.Net.Security。 SslState.ProcessReceivedBlob(Byte [] buffer,Int32 count,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReadFrame(Byte [] buffer,Int32 readBytes,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReceiv eBlob(Byte [] buffer,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte [] incoming,Int32 count,AsyncProtocolRequest asyncRequest ) at System.Net.Security.SslState.ProcessReceivedBlob(Byte [] buffer,Int32 count,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartReadFrame(Byte [] buffer,Int32 readBytes,AsyncProtocolRequest asyncRequest) at System .Net.Security。SslState.StartReceiveBlob(Byte []緩衝區,AsyncProtocolRequest asyncRequest) at System.Net.Security.SslState.StartSendBlob(Byte [] incoming,Int32 count, AsyncProtocolRequest asyncRequest) 在System.Net.Security.SslState.ForceAuthentication(布爾receiveFirst,字節[]緩衝液,AsyncProtocolRequest asyncRequest) 在System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 在System.Net.TlsStream.CallProcessAuthentication (對象狀態) at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code,CleanupCode backoutCode,Object us在System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback回調,對象狀態) 在System.Net.TlsStream.ProcessAuthentication() LazyAsyncResult result) at System.Net.TlsStream.Write(Byte [] buffer,Int32 offset,Int32 size) at System.Net.PooledStream.Write(Byte [] buffer,Int32 offset,Int32 size) at System.Net .ConnectStream.WriteHeaders(布爾異步) ---內部異常堆棧跟蹤--- 在System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest請求) 在System.Web.Services.Protocols.HttpWebClientProtocol的末尾。 GetWebRes ponse(WebRequest的要求) 在System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke在

回答

2

看來你的SSL證書是自簽名的或不被信任的,因爲這

System.Net.WebException一個CA:基礎連接已關閉: 可能不建立SSL/TLS安全通道的信任關係。

使我相信......最簡單的辦法:安裝一個受信任的證書 ...

絕對不生產
其他的解決辦法是修改客戶端驗證

public class TrustAllCertificatePolicy : System.Net.ICertificatePolicy 
{ 
public TrustAllCertificatePolicy() 
{} 

public bool CheckValidationResult(ServicePoint sp, 
    X509Certificate cert,WebRequest req, int problem) 
{ 
    return true; 
} 
} 

// this needs to be done once before the first webservice call 
System.Net.ServicePointManager.CertificatePolicy = new TrustAllCertificatePolicy(); 

請參閱http://weblogs.asp.net/jan/archive/2003/12/04/41154.aspx

+0

謝謝Yahia。我將安裝證書並測試 – Sathish

+1

CertificatePolicy現在已過時。改用ServerCertificateValidationCallback。沒有,仍然沒有生產:-) http://msdn.microsoft.com/en-us/library/vstudio/system.net.servicepointmanager.servercertificatevalidationcallback(v=vs.100).aspx – Jaans

0

看起來像你的服務器提供SSL證書無效(字符串methodName的,對象[]參數) ... checkout this article它應該幫助避免這個問題。

也可以嘗試this link

+0

謝謝安納塔。我會嘗試 – Sathish