SHARE
TWEET

Untitled

a guest May 22nd, 2019 78 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package clientcert;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.DataInputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.ObjectInputStream;
  8. import java.io.ObjectOutputStream;
  9. import java.io.OutputStreamWriter;
  10. import java.io.PrintWriter;
  11. import java.math.BigInteger;
  12. import java.net.Socket;
  13. import java.net.UnknownHostException;
  14. import java.security.cert.CertificateExpiredException;
  15. import java.security.cert.CertificateNotYetValidException;
  16. import java.security.cert.X509Certificate;
  17. import java.util.logging.Level;
  18. import java.util.logging.Logger;
  19. import sun.security.tools.keytool.CertAndKeyGen;
  20. import sun.security.x509.X500Name;
  21.  
  22. public class ClientCert {
  23.  
  24.     public static void main(String args[]) {
  25.         String host = "127.0.0.1";
  26.         int port = 8081;
  27.         new ClientCert(host, port);
  28.     }
  29.  
  30.     public ClientCert(String host, int port) {
  31.         try {
  32.                         boolean firstTime=true;
  33.             String serverHostname = new String("127.0.0.1");
  34.  
  35.             System.out.println("Connecting to host " + serverHostname + " on port " + port + ".");
  36.  
  37.             Socket echoSocket = null;
  38.             PrintWriter out = null;
  39.             BufferedReader in = null;
  40.                        
  41.                        
  42.  
  43.             try {
  44.                 echoSocket = new Socket(serverHostname, 8081);
  45.                 out = new PrintWriter(echoSocket.getOutputStream(), true);
  46.                 in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
  47.                                
  48.                                
  49.             } catch (UnknownHostException e) {
  50.                 System.err.println("Unknown host: " + serverHostname);
  51.                 System.exit(1);
  52.             } catch (IOException e) {
  53.                 System.err.println("Unable to get streams from server");
  54.                 System.exit(1);
  55.             }
  56.  
  57.             /** {@link UnknownHost} object used to read from console */
  58.                         OutputStreamWriter os = new OutputStreamWriter(echoSocket.getOutputStream());
  59.                         PrintWriter outS = new PrintWriter(os);
  60.                        
  61.                         DataInputStream inS = new DataInputStream(System.in);
  62.                        
  63.             BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
  64.                        
  65.                         // Certificat PART -------------------------------------
  66.                         // Sending Certificate to the server
  67.                         new ObjectOutputStream(echoSocket.getOutputStream()).writeObject(createCertificate("Client"));
  68.                         // ~~
  69.                        
  70.                         // Reading Certificate from Client
  71.                         X509Certificate[] recievedCert=new X509Certificate[1];
  72.                         recievedCert[0] =  (X509Certificate) new ObjectInputStream(echoSocket.getInputStream()).readObject();
  73.                         System.out.println("Certificate Recieved from : "+recievedCert[0].getIssuerDN());
  74.                         // ~~
  75.                         recievedCert[0].checkValidity();
  76.                         // -----------------------------------------------------
  77.                        
  78.  
  79.                         //Diffie Hellman Sessions keys
  80.                         BigInteger phi = new BigInteger(in.readLine());
  81.                         System.out.println("Received phi = " + phi);
  82.                        
  83.                         BigInteger e = new BigInteger(in.readLine());
  84.                         System.out.println("Received e = " + e);
  85.                        
  86.                         BigInteger n = new BigInteger(in.readLine());
  87.                         System.out.println("Received n = " + n);
  88.                         // -----------------------------------------------------
  89.                        while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 && e.compareTo(phi) < 0) {
  90.  
  91.                          e.add(BigInteger.ONE);
  92.  
  93.                             }
  94.  
  95.                             BigInteger d = e.modInverse(phi);
  96.                             System.out.println("Self-Generated d = " + d);
  97.                            
  98.                             System.out.println("Client is Ready");
  99.              while (true) {
  100.                                
  101.                 System.out.print("client: ");
  102.                 String userInput = inS.readLine();
  103.                                
  104.                                 byte[] encrypted = (new BigInteger(userInput.getBytes())).modPow(e, n).toByteArray();
  105.                                 //System.out.println("Encrypted String in Bytes: " + bytesToString(encrypted));
  106.                                
  107.                                 outS.println(new BigInteger(encrypted));
  108.                                 os.flush();
  109.                                
  110.                 /** Exit on 'q' char sent */
  111.                 if ("q".equals(userInput)) {
  112.                     break;
  113.                 }
  114.  
  115.                                
  116.             }
  117.                          
  118.             /** Closing all the resources */
  119.             out.close();
  120.             in.close();
  121.             stdIn.close();
  122.             echoSocket.close();
  123.         }
  124.                 catch (ClassNotFoundException ex) {
  125.                 Logger.getLogger(ClientCert.class.getName()).log(Level.SEVERE, null, ex);
  126.             } catch (CertificateExpiredException ex) {
  127.                 Logger.getLogger(ClientCert.class.getName()).log(Level.SEVERE, null, ex);
  128.             } catch (CertificateNotYetValidException ex) {
  129.                 Logger.getLogger(ClientCert.class.getName()).log(Level.SEVERE, null, ex);
  130.             }catch (Exception e) {
  131.             e.printStackTrace();
  132.         }
  133.     }
  134.        
  135.        public X509Certificate createCertificate(String IssuerName)
  136. {
  137. try{
  138.             CertAndKeyGen keyGen=new CertAndKeyGen("RSA","SHA1WithRSA",null);
  139.             keyGen.generate(1024);
  140.            
  141.              
  142.             //Generate self signed certificate
  143.             X509Certificate[] chain=new X509Certificate[1];
  144.             chain[0]=keyGen.getSelfCertificate(new X500Name("CN="+IssuerName), (long)365*24*3600);
  145.             //System.out.println("Certificate : "+chain[0].toString());
  146.             return chain[0];
  147.         }catch(Exception ex){
  148.             ex.printStackTrace();
  149.         }
  150.             return null;
  151. }
  152.  
  153.     private String bytesToString(byte[] encrypted) {
  154.         String test = "";
  155.  
  156.         for (byte b : encrypted) {
  157.  
  158.             test += Byte.toString(b);
  159.  
  160.         }
  161.  
  162.         return test;
  163.  
  164.     }
  165.        
  166. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top