我正在用java構建一個網絡驗證系統。 我想用SSL加密連接,所以我使用SSLServerSocket。 我產生了keytool密鑰庫(在SSL目錄)未經驗證的SSL加密(SSH Like)
keytool -genkey -keystore myKeystore -keyalg RSA
然後在我的服務器類:
System.setProperty("javax.net.ssl.keyStore", "ssl/myKeystore");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");
然後在我的客戶:
System.setProperty("javax.net.ssl.trustStore", "ssl/myKeystore");
System.setProperty("javax.net.ssl.trustStorePassword", "123456");
這工作,但我不能依靠客戶來創建密鑰庫。
我的目標是一個類似於SSH的模型:客戶端有一個私鑰,它將發送給服務器,服務器使用公鑰對其進行驗證。
我不能使用簡單的RSA密鑰文件而不是密鑰庫嗎?
如果沒有證書,則無法執行SSL。您可以在初始握手中規避身份驗證;但是證書也用於加密密鑰。也許http://stackoverflow.com/questions/859111/how-do-i-accept-a-self-signed-certificate-with-a-java-httpsurlconnection顯示你想要做什麼。 – 2013-02-24 18:59:56
@PeterRitchie證書不用於加密。 SSL使用兩端獨立生成的對稱會話密鑰。 – EJP 2013-02-24 20:24:00
@ejp證書中的密鑰可能用於加密......並且可能用於協商的某些部分。如果沒有至少一個證書,你就不能這麼做任何SSL(包括加密)。即對等方不能在沒有初始證書的情況下協商加密算法或交換新的密鑰。 – 2013-02-25 02:07:08