C#等同于Java SSL-socket-connection

时间:2012-05-31 21:36:50

标签: c# java ssl cisco

嘿伙计们,我正在尝试为Cisco Unified Communications Manager编写AXL客户端(SOAP)。为此,我需要建立与AXL服务的ssl连接。不幸的是,我不太了解所有那些ssl-stuff。

然而,我能够找到一个可行的Java示例,这就是我想要的。问题是,我需要在C#.NET中使用它。所以我希望,有人可以在C#-version中“翻译”以下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-Class:

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;
}

}

任何帮助都将不胜感激。

由于

编辑:抱歉我应该提到:你是对的我可以生成一个代理类,但遗憾的是它无法正常工作。 cisco做得非常糟糕(更不用说真正糟糕的文档)。在解析某些响应时,代理类会抛出一些xml错误。所以我必须手动为这种情况做...

我稍后会担心证书安全性

1 个答案:

答案 0 :(得分:3)

您是否尝试过“正确”的方式使用网络服务?在Visual Studio中为您的C#项目添加SOAP Web服务引用,获取存根等?这是从C#中最简单的方法。您可以在添加引用时在URL中指定https协议。