2

TCP/IP ソケットを使用して、クライアントおよびサーバー アプリケーションを作成しています。当初は通常のソケットを使用していましたが、現在は接続に SSL を使用することにしました。キーストアを作成し、アプリケーションを実行しようとしましたが、まだ成功していません。

ここにサーバー用の私のコードがあります

public class ArFileServer {

public static void main(String[] args) 
{
    boolean listening = true;
    ServerSocketFactory serversocketfactory;
    ServerSocket serverSocket;  

    try
    {
        //serverSocket = new ServerSocket(4445);

        serversocketfactory = SSLServerSocketFactory.getDefault();
        serverSocket = serversocketfactory.createServerSocket(4445);

        String keystore = System.getProperty("javax.net.ssl.trustStore");
        System.out.println(keystore);

        // infinite loop to continually listen for connection requests made by clients
        while (listening)
        {
            new ClientConnection(serverSocket.accept()).start();

            if (serverSocket != null)
            {
                System.out.println("Connection to client established");
            }
        }

        serverSocket.close();
    }
    catch (IOException e)
    {
        System.out.println("Error could not create socket connection to port, check that port is not busy");
    }
}
}

クライアントコードは次のとおりです。

public class ClientSocket 
{
SocketFactory socketfactory = null;
Socket clientSocket = null;
PrintWriter out = null;
BufferedReader in = null;


// establish a connection to All Care's server application through socket 4444 (adjust localhost to reflect the IP address that the server
// is being run from)
public ClientSocket()
{
    try
    {
        //clientSocket = new Socket("localhost", 4445);

        //SocketFactory socketfactory = SSLSocketFactory.getDefault();
        clientSocket = socketfactory.createSocket("192.168.1.8", 4445);
        out = new PrintWriter(clientSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

        String truststore = System.getProperty("javax.net.ssl.trustStore");
        System.out.println(truststore);
    }
    catch (IOException e)
    {
        System.out.println("Could not connect to All Care Server Application : " + e.getMessage());
    }
}
}

これらのランタイム引数も使用しています。

-Djavax.net.ssl.keyStore=C:\Users\Chris\Documents\NetBeansProjects\ArFile\keystore.jks -Djavax.net.ssl.keyStorePassword=password

トラストストアを印刷しようとすると、常に null が返されます。何が間違っていますか?

4

2 に答える 2

1

トラストストアを印刷しようとすると、常にnullが返されます

あなたはそれを決して設定しないからです。あなたがしているのは、システムプロパティの値を出力することだけです。設定しなかった場合はnullです。

私は何が間違っているのですか?

意味のない情報を印刷する以外は、まだ何もありません。しかし、コードの多くは意味がありません。

if (serverSocket != null)
{
    System.out.println("Connection to client established");
}

serverSocket非ヌルであることは、この時点で避けられないことであり、(b)クライアントソケットが確立されていることとは何の関係もありません。これはこの時点で避けられません。

catch (IOException e)
{
    System.out.println("Error could not create socket connection to port, check that port is not busy");
}

このIOException時点で多くのことを意味する可能性がありますが、それが意味しないことの1つは、「ポートへのソケット接続を作成できない」ということです。接続を行うのはクライアントです。サーバーは接続を受け入れます。例外をキャッチした場合は、自分で作成するだけでなく、常にそのメッセージを出力してください。

于 2012-08-03T05:15:44.270 に答える
0

ランタイム引数で trustStore と keyStore の両方を定義する必要があります。

-Djavax.net.ssl.keyStore=xxx.ks 
-Djavax.net.ssl.keyStorePassword=yyy 
-Djavax.net.ssl.trustStore=xxx.ks 
-Djavax.net.ssl.trustStorePassword=yyy 

どちらも同じファイルにすることができます。

trustStore には、他人の公開鍵が含まれています。keyStore には、独自の鍵と証明書が含まれています。

于 2012-08-03T07:48:19.687 に答える