サーバーとの接続を確立して文を送信し、サーバーがその応答を送信する単純なJavaクライアント/サーバープログラムを作成しています。これは実際には簡単な例です。
上記のシナリオでは、SSL ベースの相互認証を探しています。Javaで実装する必要があります。
例や Java での実装方法があれば教えてください。
サーバーとの接続を確立して文を送信し、サーバーがその応答を送信する単純なJavaクライアント/サーバープログラムを作成しています。これは実際には簡単な例です。
上記のシナリオでは、SSL ベースの相互認証を探しています。Javaで実装する必要があります。
例や Java での実装方法があれば教えてください。
「クライアント/サーバー」と言うとき、それは Socket を使用することを意味しますか? ただし、SSL は通常、HTTP 接続で使用されます。ソケット接続で使用されているのを見たことがありません。HTTP のサンプルを次に示します。PKCS12 証明書をキーストアにロードし、そのストアを SSLContext に提供する必要があります。
private SSLSocketFactory getFactory( File pKeyFile, String pKeyPassword ) throws ... {
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509);
KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream keyInput = new FileInputStream(pKeyFile);
keyStore.load(keyInput, pKeyPassword.toCharArray());
keyInput.close();
keyManagerFactory.init(keyStore, pKeyPassword.toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());
return context.getSocketFactory();
}
URL url = new URL("someurl");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(getFactory(new File("file.p12"), "secret"));
サーバーコード:
import java.io.*;
import java.net.*;
import java.util.*;
public class OTPServer {
public static void main(String []args) throws IOException {
ServerSocket ServerSocket= new ServerSocket(7777);
System.out.println("Sever running and waiting for client");
Socket ClientSocket=ServerSocket.accept();
PrintWriter out=new PrintWriter(ClientSocket.getOutputStream(),true);
Scanner sc=new Scanner(ClientSocket.getInputStream());
String id=sc.nextLine();
Random r=new Random();
String otp=new String();
for(int i=0;i<5;i++){
otp+=r.nextInt(10);
}
System.out.print(otp);
String newId=sc.nextLine();
String newOtp=sc.nextLine();
if(newId.equals(id)){
if(!newOtp.equals(otp)){
out.println("Incoreeect OTP!");
}
else{
out.println("Logged In!");
}
}
System.exit(0);
}
}
クライアントコード:
import java.io.*;
import java.net.*;
import java.util.*;
public class OTPServer {
public static void main(String []args) throws IOException {
ServerSocket ServerSocket= new ServerSocket(7777);
System.out.println("Sever running and waiting for client");
Socket ClientSocket=ServerSocket.accept();
PrintWriter out=new PrintWriter(ClientSocket.getOutputStream(),true);
Scanner sc=new Scanner(ClientSocket.getInputStream());
String id=sc.nextLine();
Random r=new Random();
String otp=new String();
for(int i=0;i<5;i++){
otp+=r.nextInt(10);
}
System.out.print(otp);
String newId=sc.nextLine();
String newOtp=sc.nextLine();
if(newId.equals(id)){
if(!newOtp.equals(otp)){
out.println("Incoreeect OTP!");
}
else{
out.println("Logged In!");
}
}
System.exit(0);
}
}