簡體   English   中英

Java SSL 連接錯誤 - 無效的密鑰庫格式

[英]Java SSL connection error - Invalid keystore format

我正在創建一個服務器和客戶端一體化聊天應用程序,我正在嘗試切換到 SSL 連接。 我創建了一個keystore.jks和一個證書文件( .cer ),但是現在當程序嘗試建立連接時,代理客戶端會拋出:

引起:java.io.IOException:無效的密鑰庫格式

這是代碼:

System.setProperty("javax.net.ssl.keyStore", "certificates/keystore.jks");
System.setProperty("javax.net.ssl.trustStore", "certificates/certificate.cer");
System.setProperty("javax.net.ssl.keyStorePassword", "password");

if (this.role == ConnectionRole.SERVER) {
    connectingAlert.getJFrame().setVisible(true);
    setupServer();
    do {
        Thread.sleep(10);
    } while (socket == null);
}

if (this.role == ConnectionRole.CLIENT) {
    connectingAlert.getJFrame().setVisible(true);
    setupClient(targetIP);
}

private void setupServer() throws IOException {
    SSLServerSocketFactory sslSrvFact = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
    serverSocket = (SSLServerSocket) sslSrvFact.createServerSocket(8080, 1);
    socket = (SSLSocket) serverSocket.accept();
    setupStreams();
}

private void setupClient(String IPAddress) throws IOException {
    SSLSocketFactory sslFact = (SSLSocketFactory) SSLSocketFactory.getDefault();
    socket = (SSLSocket) sslFact.createSocket("localhost", 8080);
    setupStreams();
}

private void setupStreams() throws IOException {
    dataOut = new ObjectOutputStream(socket.getOutputStream());
    dataIn = new ObjectInputStream(socket.getInputStream());
    chatInterface = ChatInterface.getInstance();
}
System.setProperty("javax.net.ssl.trustStore", "certificates/certificate.cer");

問題就在這里。 .cer 文件不是信任庫。 您需要通過帶有-trustcacerts選項的keytool將其導入到真正的 Java 信任-trustcacerts

但是不清楚您為什么要使用信任庫。 您是否希望擁有自簽名證書的同行將它們發送給您? 大多數情況下,您應該只使用 Java 附帶的信任庫,而根本不要設置javax.net.ssl.trustStore

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM