【问题标题】:C# equivalent to Java SSL-socket-connectionC# 等价于 Java SSL-socket-connection
【发布时间】:2012-06-06 04:24:55
【问题描述】:

大家好,我正在尝试为 Cisco Unified Communications Manager 编写 AXL 客户端 (SOAP)。为此,我需要建立到 AXL 服务的 ssl 连接。不幸的是,我对所有那些 ssl 的东西知之甚少。

但是,我能够找到一个有效的 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;
}

}

任何帮助将不胜感激。

谢谢

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

我稍后会担心证书的安全性

【问题讨论】:

  • 如果我正确阅读了该代码,它实际上并没有检查相关证书的有效性,提供接近于零的安全值。我不会再为 那个 代码而烦恼,而是找到一个好的 C# TLS 教程或 API 参考,然后从那里开始......
  • 我不会 C# 和 .net,但你不应该去那么低的水平。应该有某种可以使用的 Web 服务/SOAP 库,它会处理给定 URL 的连接细节。通常,您使用工具来解析 SOAP 服务的 WSDL 文件,并编写所有代码来访问服务和编码/解码数据。例如,check out this other question
  • 对不起,我应该提到:你说得对,我可以生成一个代理类,但遗憾的是它不能正常工作。 cisco 在这方面做得非常糟糕(更不用说非常糟糕的文档了)。解析某些响应时,代理类会引发一些 xml 错误。所以我必须手动处理这种情况......
  • .NET 中没有方便的内置 SSL 类。您可以在我们的 SecureBlackbox 产品中使用 SSLSocket 类(详见eldos.com/sbb/net-ssl.php),它具有类似于 .NET Socket 类的 API,并提供透明的 SSL/TLS 支持。

标签: c# java ssl cisco


【解决方案1】:

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

【讨论】:

  • 这和使用wsdl不一样吧?我该怎么做?你能告诉我如何开始尝试这个,或者你有一些好的资源可以推荐吗?
  • 是的,和使用WSDL一样。您向项目添加 Web 引用并输入 WSDL 的 URL。它会生成您可以在项目中使用的类。
猜你喜欢
  • 1970-01-01
  • 2010-10-01
  • 2013-10-09
  • 2013-05-26
  • 2010-10-04
  • 2013-05-08
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多