Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#相当于Java SSL套接字连接_C#_Java_Ssl_Cisco - Fatal编程技术网

C#相当于Java SSL套接字连接

C#相当于Java SSL套接字连接,c#,java,ssl,cisco,C#,Java,Ssl,Cisco,嘿,伙计们,我正在尝试为Cisco Unified Communications Manager编写一个AXL客户端(SOAP)。为此,我需要建立到AXL服务的ssl连接。不幸的是,我对ssl的东西了解不多 然而,我能够找到一个工作的Java示例,这就是我想要的。问题是,我需要在C#NET中使用它。所以我希望有人能用C版本“翻译”下面的Java代码。但它必须做完全相同的事情,特别是身份验证和证书 代码如下: String sAXLSOAPRequest = "..."; byte

嘿,伙计们,我正在尝试为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;
}
}

任何帮助都将不胜感激

谢谢


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


稍后我会担心证书安全问题

您是否尝试过以“正确”的方式使用web服务?在VisualStudio中向您的C#项目添加SOAP web服务引用,获取存根等?这是从C#开始做这件事最简单的方法。添加引用时,您可以在URL中指定https协议。

您是否尝试过以“正确”的方式使用web服务?在VisualStudio中向您的C#项目添加SOAP web服务引用,获取存根等?这是从C#开始做这件事最简单的方法。添加引用时,您只需在URL中指定https协议。

如果我正确阅读了该代码,它实际上不会检查相关证书的有效性,从而提供接近零的安全值。我不再为这些代码费心了,而是找到一个好的C#TLS教程或API参考,然后从那里开始……我不知道C#和.net,但你不应该走这么低的水平。在给定URL的情况下,应该有某种Web服务/SOAP库供您使用,它将处理连接细节。通常,您使用一个工具来解析SOAP服务的WSDL文件,并编写所有代码来访问服务和编码/解码数据。例如,对不起,我应该提到:你是对的,我可以生成一个代理类,但遗憾的是它不能正常工作。思科在这方面做得非常糟糕(更不用说糟糕的文档了)。代理类在解析某些响应时抛出一些xml错误。因此,我必须为这种情况手动执行……在.NET中没有方便的内置SSL类。您可以在我们的SecureBackbox产品中使用SSLSocket类(有关详细信息,请参阅),它的API类似于.NET套接字类,并提供透明的SSL/TLS支持。如果我正确阅读了该代码,它实际上不会检查有问题的证书的有效性,从而提供接近零的安全值。我不再为这些代码费心了,而是找到一个好的C#TLS教程或API参考,然后从那里开始……我不知道C#和.net,但你不应该走这么低的水平。在给定URL的情况下,应该有某种Web服务/SOAP库供您使用,它将处理连接细节。通常,您使用一个工具来解析SOAP服务的WSDL文件,并编写所有代码来访问服务和编码/解码数据。例如,对不起,我应该提到:你是对的,我可以生成一个代理类,但遗憾的是它不能正常工作。思科在这方面做得非常糟糕(更不用说糟糕的文档了)。代理类在解析某些响应时抛出一些xml错误。因此,我必须为这种情况手动执行……在.NET中没有方便的内置SSL类。您可以在我们的SecureBackbox产品中使用SSLSocket类(有关详细信息,请参阅),它的API类似于.NET套接字类,并提供透明的SSL/TLS支持。这与使用wsdl不同,是吗?我该怎么做?你能告诉我如何开始尝试这个,或者你可以推荐一些好的资源吗?是的,它和使用WSDL是一样的。向项目添加web引用并输入WSDL的URL。它生成可以在项目中使用的类。这与使用wsdl不同,是吗?我该怎么做?你能告诉我如何开始尝试这个,或者你可以推荐一些好的资源吗?是的,它和使用WSDL是一样的。向项目添加web引用并输入WSDL的URL。它生成可以在项目中使用的类。