Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package clientcert;
- import java.io.BufferedReader;
- import java.io.DataInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.io.OutputStreamWriter;
- import java.io.PrintWriter;
- import java.math.BigInteger;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import java.security.cert.CertificateExpiredException;
- import java.security.cert.CertificateNotYetValidException;
- import java.security.cert.X509Certificate;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import sun.security.tools.keytool.CertAndKeyGen;
- import sun.security.x509.X500Name;
- public class ClientCert {
- public static void main(String args[]) {
- String host = "127.0.0.1";
- int port = 8081;
- new ClientCert(host, port);
- }
- public ClientCert(String host, int port) {
- try {
- boolean firstTime=true;
- String serverHostname = new String("127.0.0.1");
- System.out.println("Connecting to host " + serverHostname + " on port " + port + ".");
- Socket echoSocket = null;
- PrintWriter out = null;
- BufferedReader in = null;
- try {
- echoSocket = new Socket(serverHostname, 8081);
- out = new PrintWriter(echoSocket.getOutputStream(), true);
- in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
- } catch (UnknownHostException e) {
- System.err.println("Unknown host: " + serverHostname);
- System.exit(1);
- } catch (IOException e) {
- System.err.println("Unable to get streams from server");
- System.exit(1);
- }
- /** {@link UnknownHost} object used to read from console */
- OutputStreamWriter os = new OutputStreamWriter(echoSocket.getOutputStream());
- PrintWriter outS = new PrintWriter(os);
- DataInputStream inS = new DataInputStream(System.in);
- BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
- // Certificat PART -------------------------------------
- // Sending Certificate to the server
- new ObjectOutputStream(echoSocket.getOutputStream()).writeObject(createCertificate("Client"));
- // ~~
- // Reading Certificate from Client
- X509Certificate[] recievedCert=new X509Certificate[1];
- recievedCert[0] = (X509Certificate) new ObjectInputStream(echoSocket.getInputStream()).readObject();
- System.out.println("Certificate Recieved from : "+recievedCert[0].getIssuerDN());
- // ~~
- recievedCert[0].checkValidity();
- // -----------------------------------------------------
- //Diffie Hellman Sessions keys
- BigInteger phi = new BigInteger(in.readLine());
- System.out.println("Received phi = " + phi);
- BigInteger e = new BigInteger(in.readLine());
- System.out.println("Received e = " + e);
- BigInteger n = new BigInteger(in.readLine());
- System.out.println("Received n = " + n);
- // -----------------------------------------------------
- while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0) {
- e.add(BigInteger.ONE);
- }
- BigInteger d = e.modInverse(phi);
- System.out.println("Self-Generated d = " + d);
- System.out.println("Client is Ready");
- while (true) {
- System.out.print("client: ");
- String userInput = inS.readLine();
- byte[] encrypted = (new BigInteger(userInput.getBytes())).modPow(e, n).toByteArray();
- //System.out.println("Encrypted String in Bytes: " + bytesToString(encrypted));
- outS.println(new BigInteger(encrypted));
- os.flush();
- /** Exit on 'q' char sent */
- if ("q".equals(userInput)) {
- break;
- }
- }
- /** Closing all the resources */
- out.close();
- in.close();
- stdIn.close();
- echoSocket.close();
- }
- catch (ClassNotFoundException ex) {
- Logger.getLogger(ClientCert.class.getName()).log(Level.SEVERE, null, ex);
- } catch (CertificateExpiredException ex) {
- Logger.getLogger(ClientCert.class.getName()).log(Level.SEVERE, null, ex);
- } catch (CertificateNotYetValidException ex) {
- Logger.getLogger(ClientCert.class.getName()).log(Level.SEVERE, null, ex);
- }catch (Exception e) {
- e.printStackTrace();
- }
- }
- public X509Certificate createCertificate(String IssuerName)
- {
- try{
- CertAndKeyGen keyGen=new CertAndKeyGen("RSA","SHA1WithRSA",null);
- keyGen.generate(1024);
- //Generate self signed certificate
- X509Certificate[] chain=new X509Certificate[1];
- chain[0]=keyGen.getSelfCertificate(new X500Name("CN="+IssuerName), (long)365*24*3600);
- //System.out.println("Certificate : "+chain[0].toString());
- return chain[0];
- }catch(Exception ex){
- ex.printStackTrace();
- }
- return null;
- }
- private String bytesToString(byte[] encrypted) {
- String test = "";
- for (byte b : encrypted) {
- test += Byte.toString(b);
- }
- return test;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement