簡體   English   中英

帶有openssl / java的雙向SSL

[英]Two Way SSL with openssl/java

我有一個Java客戶端應用程序,它希望以雙向SSL連接到服務器。 我創建了一對公鑰/私鑰。 公鑰名稱為key.cert ,私鑰名稱為key.pem 然后服務器端給我一個帶有server.cert名稱的公鑰。 我的問題是:

  1. 怎樣將客戶端(客戶端)中的三個key( key.cert \\ key.pem \\ server.cert )轉換為Java Key Store(JKS)
  2. 什么用代碼創建用於連接服務器的套接字
        System.out.println("Connecting to " +IP + "port "
                + Port);

        // load client private key
            KeyStore clientKeys = KeyStore.getInstance("JKS");
            clientKeys.load(
                    new FileInputStream(ProjectConfig
                            .getProperty("KeyStoreAndTrustStore")),
                    ProjectConfig.getProperty(
                            "KeyStoreAndTrustStorePassword")
                            .toCharArray());
            KeyManagerFactory clientKeyManager = KeyManagerFactory
                    .getInstance("SunX509");
            clientKeyManager.init(
                    clientKeys,
                    ProjectConfig.getProperty(
                            "KeyStoreAndTrustStorePassword")
                            .toCharArray());
            // load server public key
            KeyStore serverPub = KeyStore.getInstance("JKS");
            serverPub.load(
                    new FileInputStream(ProjectConfig
                            .getProperty("KeyStoreAndTrustStore")),
                    ProjectConfig.getProperty(
                            "KeyStoreAndTrustStorePassword")
                            .toCharArray());
            TrustManagerFactory trustManager = TrustManagerFactory
                    .getInstance("SunX509");
            trustManager.init(serverPub);

            // use keys to create SSLSoket
            SSLContext ssl = SSLContext.getInstance("TLS");
            ssl.init(clientKeyManager.getKeyManagers(),
                    trustManager.getTrustManagers(),
                    SecureRandom.getInstance("SHA1PRNG"));

            sslClient = (SSLSocket) ssl.getSocketFactory().createSocket(
                    IP, Port);

            sslClient.setSoTimeout(TimeOut);
            System.out.println("connected to "
                    + sslClient.getRemoteSocketAddress());
            OutputStream outToServer = sslClient.getOutputStream();

            out = new DataOutputStream(outToServer);
            String contentToSend = ((String)Paylod);

            out.writeUTF(contentToSend);
            System.out.println(" sending data.... " + contentToSend);
            InputStream inFromServer = sslClient.getInputStream();
            in = new DataInputStream(inFromServer);
            response = in.readUTF();
            System.out.println("Server says.... " + response);
            sslClient.close();

暫無
暫無

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

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