Java SSLSocket 握手失败

标签 java c ssl connection

我正在尝试找到一种使用 SSL 在 Java 客户端和 C 服务器之间建立连接的方法。

这是java客户端:

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;

public class Main {

    public static void main(String[] args) throws IOException {

        SSLSocketFactory sslsockfact = 
            (SSLSocketFactory) SSLSocketFactory.getDefault();
        SSLSocket sslsocket = (SSLSocket) sslsockfact.createSocket(
            args[0], Integer.parseInt(args[1]));
        sslsocket.startHandshake();
        System.in.read();
    }
}

建立连接和执行握手只有几个函数,但我收到了这个错误:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: 
  Received fatal alert: handshake_failure
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(
      SSLSocketImpl.java:1657)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(
      SSLSocketImpl.java:932)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(
      SSLSocketImpl.java:1096)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(
      SSLSocketImpl.java:1123)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(
      SSLSocketImpl.java:1107)
    at posslu.Main.main(Main.java:22)
Java Result: 1

不幸的是,我没有服务器程序的任何来源——我只知道协议(protocol)。甚至可以使用 ssl 连接 java 和 C++ 吗? AFAIK 服务器是使用 openssl 编写的。

有什么帮助吗?

编辑:

我正在使用 posix 套接字从 Windows 连接到 Linux 和服务器。

最佳答案

是的,在 Java 和 C 之间通过 SSL 通信绝对是可能的。

Java 客户端代码可能会失败,因为它无法识别正在发送的服务器证书。

您需要确保服务器的证书存在于 Java 客户端的信任库中。

关于Java SSLSocket 握手失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928240/

相关文章:

java - 是否有一个java库来调用带有给定注释的方法?

c++ - 如何使用某些参数展开某个循环,例如 GCC 中的 max-unroll-times

c++ - Opencv:用 imwrite 保存双矩阵

SSL 和公钥安全

Javascript/SSL - 我应该在 POST 或 GET 请求之前加密 "form inputs"还是 SSL 呢?

java - 用java解开?

java - 检查java中字典中是否存在元组键

java - 使用 Java 在 WebDriver 中通过 Ctrl+F5 刷新浏览器

c - 为什么 gcc 不优化全局变量?

python - 无法使用 Python 中的请求加载网站