2009-12-18 140 views
1

我試圖找到一種方法來建立使用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插座。

+1

由於許多不同的原因,此特定的SSL錯誤可能會發生。嘗試從服務器獲取日誌,這應該告訴你原因。 – 2009-12-18 14:18:05

回答

1

是的,這是絕對有可能通過Java和C

Java客戶端代碼可能失敗,因爲它不承認發送服務器證書之間的SSL通信。

您需要確保服務器的證書存在於Java客戶端的信任庫中。

0

嘗試設置此係統屬性:

System.setProperty("javax.net.debug", "all"); 

這會給你什麼是握手期間發生太多的調試信息。