2012-05-31 66 views
0

嘿,我正在嘗試爲Cisco Unified Communications Manager編寫一個AXL客戶端(SOAP)。爲此,我需要建立一個到AXL服務的ssl連接。不幸的是,我對所有那些ssl-stuff都不太瞭解。C#相當於Java SSL-socket連接

但是我能夠找到一個正在運行的Java示例,它的確是我想要的。問題是,我需要在C#.NET中。所以我希望,有人可以在C#版本中「翻譯」下面的Java代碼。但它必須完全相同,特別是認證和證書。

下面是代碼:

String sAXLSOAPRequest = "..."; 
    byte[] bArray = null; // buffer for reading response from 
    Socket socket = null; // socket to AXL server 
    OutputStream out = null; // output stream to server 
    InputStream in = null; // input stream from server 

    X509TrustManager xtm = new MyTrustManager(); 
    TrustManager[] mytm = { xtm }; 
    SSLContext ctx = SSLContext.getInstance("SSL"); 
    ctx.init(null, mytm, null); 
    SSLSocketFactory sslFact = (SSLSocketFactory) ctx.getSocketFactory(); 

    socket = (SSLSocket) sslFact.createSocket("192.168.1.100", Integer.parseInt("8443")); 
    in = socket.getInputStream(); 
    // send the request to the server 
    // read the response from the server 
    StringBuffer sb = new StringBuffer(2048); 
    bArray = new byte[2048]; 
    int ch = 0; 
    int sum = 0; 
    out = socket.getOutputStream(); 
    out.write(sAXLSOAPRequest.getBytes()); 

    while ((ch = in.read(bArray)) != -1) { 
     sum += ch; 
     sb.append(new String(bArray, 0, ch)); 
    } 
    socket.close(); 
    // output the response to the standard output 
    System.out.println(sb.toString()); 

,這是MyTrustManager級:

public class MyTrustManager implements X509TrustManager { 
MyTrustManager() { 
    // create/load keystore 
} 

public void checkClientTrusted(X509Certificate chain[], String authType) 
     throws CertificateException { 
} 

public void checkServerTrusted(X509Certificate chain[], String authType) 
     throws CertificateException { 
} 

public X509Certificate[] getAcceptedIssuers() { 
    return null; 
} 

}

任何幫助,將不勝感激。

感謝

編輯:抱歉,我應該提到:您選擇的權利,我可以生成一個代理類,但遺憾的是它不能正常工作。思科做了一個非常糟糕的工作(更不用說真的很糟糕的文檔)。代理類在解析某些響應時會引發一些xml錯誤。所以我必須爲案件做手工......

我會擔心安全證書後

+1

如果我正確讀取該代碼,它實際上不檢查有問題的證書的有效性,提供接近零的安全值。我不會再打擾_that_代碼,而是找到一個好的C#TLS教程或API參考,並從那裏去... – sarnold

+1

我不知道C#和.NET,但你不應該去這麼低的水平。應該有某種您可以使用的Web服務/ SOAP庫,它會根據URL來處理連接細節。通常,您使用工具來解析SOAP服務的WSDL文件,並寫入所有代碼以訪問服務並對數據進行編碼/解碼。例如,[檢查出這個問題](http://stackoverflow.com/questions/3100458/soap-client-in-net-references-or-examples) – theglauber

+0

對不起,我應該提到:你是正確的,我可以生成代理類,但可悲的是它沒有正常工作。思科做了一個非常糟糕的工作(更不用說真的很糟糕的文檔)。代理類在解析某些響應時會引發一些xml錯誤。所以我必須爲這種情況手動執行... – Tobi

回答

3

您是否嘗試過使用Web服務的「正確」的方式?在Visual Studio中爲您的C#項目添加SOAP Web服務引用,獲取存根等?這是從C#執行它的最簡單的方法。添加引用時,您可以在URL中指定https協議。

+0

這與使用wsdl不一樣,是嗎?我會怎麼做?你能告訴我如何開始嘗試這個,或者有一些你可以推薦的好消息嗎? – Tobi

+0

是的,它與使用WSDL相同。您爲項目添加Web引用並輸入WSDL的URL。它生成可以在您的項目中使用的類。 –