嘿,我正在嘗試爲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錯誤。所以我必須爲案件做手工......
我會擔心安全證書後
如果我正確讀取該代碼,它實際上不檢查有問題的證書的有效性,提供接近零的安全值。我不會再打擾_that_代碼,而是找到一個好的C#TLS教程或API參考,並從那裏去... – sarnold
我不知道C#和.NET,但你不應該去這麼低的水平。應該有某種您可以使用的Web服務/ SOAP庫,它會根據URL來處理連接細節。通常,您使用工具來解析SOAP服務的WSDL文件,並寫入所有代碼以訪問服務並對數據進行編碼/解碼。例如,[檢查出這個問題](http://stackoverflow.com/questions/3100458/soap-client-in-net-references-or-examples) – theglauber
對不起,我應該提到:你是正確的,我可以生成代理類,但可悲的是它沒有正常工作。思科做了一個非常糟糕的工作(更不用說真的很糟糕的文檔)。代理類在解析某些響應時會引發一些xml錯誤。所以我必須爲這種情況手動執行... – Tobi