Java SSLSocket握手失败
问题描述:
我试图找到一种方法来建立使用SSL的Java客户端和C服务器的连接。Java SSLSocket握手失败
这是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
不幸的是我没有服务器程序的任何来源 - 我只知道协议。甚至有可能使用SSL连接java和C++? AFAIK服务器使用openssl编写。
任何帮助?
编辑:
我从Windows连接到Linux和服务器的使用POSIX插座。
答
是的,这是绝对有可能通过Java和C
Java客户端代码可能失败,因为它不承认发送服务器证书之间的SSL通信。
您需要确保服务器的证书存在于Java客户端的信任库中。
答
尝试设置此系统属性:
System.setProperty("javax.net.debug", "all");
这会给你什么是握手期间发生太多的调试信息。
由于许多不同的原因,此特定的SSL错误可能会发生。尝试从服务器获取日志,这应该告诉你原因。 – 2009-12-18 14:18:05