Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.25 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement