sslサポートで簡単なメッセージを送ることができるサーバークライアントバンドルを作成しようとしています。私はJavaでかなり新しいですし、私の問題が何であるか把握できません。私は同じネットワーク上の2台のコンピュータでサーバーとクライアントプログラムを実行しています。メッセージを送信できます。私の問題は、wiresharkでメッセージをキャプチャするときにプロトコルがTCPであり、メッセージを読むことができることです。 証明書について、私はopensslですべての証明書を作成して、keytoolで.jksに変換しました。 Myca.jksは自己署名されたcaの証明書です。私はこの証明書でサーバーとクライアントに署名しました。 ヒントありがとう!Cantはjava sslソケットを使ってsslメッセージを送信します
import java.io.*; import java.net.*; import java.security.*; import java.util.*; import javax.net.ssl.*; public class sslserver { ObjectOutputStream out; ObjectInputStream in; String message; sslserver(){} void run() throws Exception { char[] passphrase = "123456".toCharArray(); KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(new FileInputStream("/home/jimmysnn/JavaApplication4/src/keystore.jks"), passphrase); KeyStore serverkeystore = KeyStore.getInstance("JKS"); serverkeystore.load(new FileInputStream("/home/jimmysnn/JavaApplication4/src/server.jks"), passphrase); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(keystore, passphrase); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(serverkeystore); SSLContext context = SSLContext.getInstance("TLS"); TrustManager[] trustManagers = tmf.getTrustManagers(); KeyManager[] keyManagers = kmf.getKeyManagers(); context.init(keyManagers, trustManagers, null); //1. creating a server socket SSLServerSocketFactory ssf = context.getServerSocketFactory(); ServerSocket ss = ssf.createServerSocket(2004); //2. Wait for connection System.out.println("Waiting for connection"); Socket s = ss.accept(); System.out.println("Connection received from " + s.getInetAddress().getHostName()); //3. get Input and Output streams out = new ObjectOutputStream(s.getOutputStream()); out.flush(); in = new ObjectInputStream(s.getInputStream()); sendMessage("Connection successful"); //4. The two parts communicate via the input and output streams Scanner input = new Scanner(System.in); do{ message = (String)in.readObject(); System.out.println("client>" + message); if (message.equals("bye")) sendMessage("bye"); }while(!message.equals("bye")); //4: Closing connection in.close(); out.close(); ss.close(); } void sendMessage(String msg) throws Exception { out.writeObject(msg); out.flush(); System.out.println("server>" + msg); } public static void main(String args[]) throws Exception { Server server = new Server(); while(true){ server.run(); } } }
import java.io.*; import java.net.*; import java.util.*; import java.security.*; import javax.net.ssl.*; public class sslclient { ObjectOutputStream out; ObjectInputStream in; String message; sslclient(){} void run() throws Exception { char[] passphrase = "123456".toCharArray(); KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(new FileInputStream("/home/ge0rge/Javaaskhsh4/src/myca.jks"), passphrase); KeyStore keystoreclient = KeyStore.getInstance("JKS"); keystoreclient.load(new FileInputStream("/home/ge0rge/Javaaskhsh4/src/client.jks"), passphrase); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(keystore); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(keystoreclient, passphrase); SSLContext context = SSLContext.getInstance("TLS"); TrustManager[] trustManagers = tmf.getTrustManagers(); KeyManager[] keyManagers = kmf.getKeyManagers(); context.init(keyManagers, trustManagers, null); SSLSocketFactory sf = context.getSocketFactory(); Socket s = sf.createSocket("192.168.1.5", 443); System.out.println("Connected to localhost in port 2004"); //2. get Input and Output streams out = new ObjectOutputStream(s.getOutputStream()); out.flush(); in = new ObjectInputStream(s.getInputStream()); //3: Communicating with the server Scanner input = new Scanner(System.in); message = (String)in.readObject(); System.out.println("server>" + message); //message = input.nextLine(); sendMessage("Hi my server"); do{ message = input.nextLine(); sendMessage(message); if(message.equals("bye")){ message = (String)in.readObject(); System.out.println("server>" + message); } }while(!message.equals("bye")); in.close(); out.close(); s.close(); } void sendMessage(String msg) throws Exception { out.writeObject(msg); out.flush(); System.out.println("client>" + msg); } public static void main(String args[]) throws Exception { Client client = new Client(); client.run(); } }
だから?問題はありますか?何が問題ですか? 「送信できません」とはどういう意味ですか?例外はありますか?その場合は、完全なトレースを投稿してください。 –