ssl 지원을 통해 간단한 메시지를 보낼 수있는 서버 - 클라이언트 번들을 만들려고합니다. 나는 자바에서 아주 새로운데, 나는 내 문제가 무엇인지 알 수 없다. 동일한 네트워크에있는 2 대의 컴퓨터에서 서버 및 클라이언트 프로그램을 실행 중이므로 메시지를 보낼 수 있습니다. 내 문제는 내가 wireshark와 함께 메시지를 캡처 할 때 프로토콜이 TCP이고 메시지를 읽을 수 있다는 것입니다. 인증서에 대해서는 openssl로 모든 인증서를 만들고 keytool로 .jks로 변환했습니다. Myca.jks는 자체 서명 된 인증서입니다.이 인증서로 서버와 클라이언트에 서명했습니다. 팁 주셔서 감사합니다!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(); } }
그래서? 문제가 있습니까? 문제가 무엇입니까? "보낼 수 없다"는 것은 무엇을 의미합니까? 예외가 있습니까? 그렇다면 전체 추적을 게시하십시오. –