importjava.io.*;importjava.net.URL;importjava.security.*;importjava.security.cert.*;importjavax.net.ssl.*;publicclassInstallCert{publicstaticvoidmain(String[]args)throwsException{Stringhost;intport;char[]passphrase;if((args.length==1)||(args.length==2)){String[]c=args[0].split(":");host=c[0];port=(c.length==1)?443:Integer.parseInt(c[1]);Stringp=(args.length==1)?"changeit":args[1];passphrase=p.toCharArray();}else{System.out.println("Usage:javaInstallCert[:port][passphrase]");return;}Filefile=newFile("jssecacerts");if(file.isFile()==false){charSEP=File.separatorChar;Filedir=newFile(System.getProperty("java.home")+SEP+"lib"+SEP+"security");file=newFile(dir,"jssecacerts");if(file.isFile()==false){file=newFile(dir,"cacerts");}}System.out.println("LoadingKeyStore"+file+"...");InputStreamin=newFileInputStream(file);KeyStoreks=KeyStore.getInstance(KeyStore.getDefaultType());ks.load(in,passphrase);in.close();SSLContextcontext=SSLContext.getInstance("TLS");TrustManagerFactorytmf=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());tmf.init(ks);X509TrustManagerdefaultTrustManager=(X509TrustManager)tmf.getTrustManagers()[0];SavingTrustManagertm=newSavingTrustManager(defaultTrustManager);context.init(null,newTrustManager[]{tm},null);SSLSocketFactoryfactory=context.getSocketFactory();System.out.println("Openingconnectionto"+host+":"+port+"...");SSLSocketsocket=(SSLSocket)factory.createSocket(host,port);socket.setSoTimeout(10000);try{System.out.println("StartingSSLhandshake...");socket.startHandshake();socket.close();System.out.println();System.out.println("Noerrors,certificateisalreadytrusted");}catch(SSLExceptione){System.out.println();e.printStackTrace(System.out);}X509Certificate[]chain=tm.chain;if(chain==null){System.out.println("Couldnotobtainservercertificatechain");return;}BufferedReaderreader=newBufferedReader(newInputStreamReader(System.in));System.out.println();System.out.println("Serversent"+chain.length+"certificate(s):");System.out.println();MessageDigestsha1=MessageDigest.getInstance("SHA1");MessageDigestmd5=MessageDigest.getInstance("MD5");for(inti=0;i>4]);sb.append(HEXDIGITS[b&15]);sb.append('');}returnsb.toString();}privatestaticclassSavingTrustManagerimplementsX509TrustManager{privatefinalX509TrustManagertm;privateX509Certificate[]chain;SavingTrustManager(X509TrustManagertm){this.tm=tm;}publicX509Certificate[]getAcceptedIssuers(){thrownewUnsupportedOperationException();}publicvoidcheckClientTrusted(X509Certificate[]chain,StringauthType)throwsCertificateException{thrownewUnsupportedOperationException();}publicvoidcheckServerTrusted(X509Certificate[]chain,StringauthType)throwsCertificateException{this.chain=chain;tm.checkServerTrusted(chain,authType);}}}