Buenasyesterday I was trying to determine *best price* to get to South America this year..obrigado Robert for stepping in public org.apache.commons.ssl.SSLClient client; public java.security.KeyStore ks = java.security.KeyStore.getInstance("JKS");public java.security.cert.Certificate cert = ks.getCertificate(alias);public String original_keystoreFile="servidor.jks"; //sub in actual location of keystore filepublic String keystoreFile ="servidor.jks"; //sub in actual location of keystore filepublic String keystorePass="contrasuena"; //sub in actual password to keystorepublic String cert_filename="C:\\cacerts"; // sub in actual location of cacerts filepublic javax.net.ssl.SSLSocket ssl_socket;public java.util.Properties props = new java.util.Properties();public String hostURL_for_socket= props.getProperty("HostURL"); //sub in actual HTTP hostpublic String securePortURL =props.getProperty("SSLHostURL"); //sub in actual SSL hosttry{ client=new org.apache.commons.ssl.SSLClient(); client = setup_certificate(client); System.out.println("SSLClient="+client);}catch(Exception excp){ System.err.println("Cannot setup SSLClient message="+excp.getMessage()); return;}System.out.println("before secure_socket = (SSLSocket) client.createSocket(hostURL_for_socket,securePortURL )");secure_socket = (javax.net.ssl.SSLSocket) client.createSocket(hostURL_for_socket,securePortURL ); System.out.println("AFTER client.createSocket secure_socket="+secure_socket); } catch(UnknownHostException unknown_host) { System.out.println("UnknownHostException has been thrown message="+unknown_host.getMessage()); System.out.println("new Socket(hostURL_for_socket="+hostURL_for_socket); System.out.println("securePortURL="+securePortURL); System.out.println("client.createSocket(hostURL_for_socket,securePortURL ) throws UnknownHostException has been thrown message="+unknown_host.getMessage()); } public org.apache.commons.ssl.SSLClient setup_certificate(org.apache.commons.ssl.SSLClient client){try{// Let's trust usual "cacerts" that come with Java. Plus, let's also trust a self-signed cert// we know of. We may have additional trusted certs inside keystore file. System.out.println("before client.addTrustMaterial( TrustMaterial.DEFAULT )"); client.addTrustMaterial( org.apache.commons.ssl.TrustMaterial.DEFAULT );// client.addTrustMaterial( new org.apache.commons.ssl.TrustMaterial( "/path/to/self-signed.pem" ) ); try { System.out.println("before key_material=new org.apache.commons.ssl.KeyMaterial( keystoreFile,keystorePass.toCharArray() )");//public org.apache.commons.ssl.KeyMateria(File jksFile,char[] password) throws GeneralSecurityException,IOException Throws: //GeneralSecurityException IOException key_material=new org.apache.commons.ssl.KeyMaterial( new java.io.File(keystoreFile),(char[])keystorePass.toCharArray() ); } catch(java.security.GeneralSecurityException general_security_exception) { System.out.println("key_material=new org.apache.commons.ssl.KeyMaterial( new java.io.File(keystoreFile),(char[])keystorePass.toCharArray() ) throws GeneralSecurityException has been thrown message="+general_security_exception.getMessage()); key_material=null; return null; } System.out.println("key_material="+key_material); System.out.println("addding keystore file ..before client.addTrustMaterial( key_material )"); if(key_material!=null) client.addTrustMaterial( key_material ); // To be different, let's bypass check the hostname of the certificate System.out.println("before client.setCheckHostname( false )"); client.setCheckHostname( false ); // default setting is "true" for SSLClient //to be difference lets allow for expired certs (not recommended) System.out.println("before client.setCheckExpiry( false )"); client.setCheckExpiry( false ); // default setting is "true" for SSLClient //lets check against the Certificate Revocation List System.out.println("before client.setCheckCRL( true )"); client.setCheckCRL( true ); // default setting is "true" for SSLClient System.out.println("before key_material=new org.apache.commons.ssl.KeyMaterial(cert_filename, keystorePass.toCharArray()) where cert_filename="+cert_filename+" keystoreFile="+keystoreFile+" keystorePass="+keystorePass); //org.apache.commons.ssl.KeyMaterial(String pathToCerts, String pathToKey, char[] keystorePass) key_material=new org.apache.commons.ssl.KeyMaterial(cert_filename, (String)keystoreFile,(char [])keystorePass.toCharArray()); System.out.println("(Certificate) key_material="+key_material); // Let's load a client certificate (max: 1 per SSLClient instance). System.out.println("adding cert to client ..before client.setKeyMaterial( key_material )"); client.setKeyMaterial( key_material); cert_filename = "C:\cacerts"; //sub in actual location of cacerts file original_keystoreFile = "servidor.jks"; //sub in actual location of server key file char[] lfstorepass = keystorePass.toCharArray(); //make sure keystorePass contains actual password for cacerts char[] lfkeypass = keystorePass.toCharArray(); //make sure keystorePass contains actual password for key store stored in cacerts (i use //same password..NOT recommended) java.security.cert.CertificateFactory cf = java.security.cert.CertificateFactory.getInstance("X.509"); System.out.println("X.509 CertificateFactory ="+cf); java.io.FileInputStream cacert_file = new java.io.FileInputStream(cert_filename); System.out.println("FileInputStream cacert_file="+cert_filename); System.out.println("Generating the cert"); java.security.cert.Certificate certificate = cf.generateCertificate(cacert_file); System.out.println("closing cacert_file="+cert_filename); cacert_file.close(); System.out.println("Generating cert chain for certificate ="+certificate); java.security.cert.Certificate[] cchain = { certificate }; System.out.println("cchain="+cchain); System.out.println("loading server key "+original_keystoreFile); java.io.FileInputStream original_keystoreFile_file = new java.io.FileInputStream(original_keystoreFile); System.out.println("original_keystoreFile_file="+original_keystoreFile_file); System.out.println("about to load KeyStore ks = java.security.KeyStore.getInstance(JKS"); java.security.KeyStore ks = java.security.KeyStore.getInstance("JKS"); System.out.println("ks="+ks); System.out.println("load keystore from original_keystoreFile_file="+original_keystoreFile_file+" lfstorepass="+lfstorepass); ks.load(original_keystoreFile_file, lfstorepass); //for asymmetric encryption (server and client keys are different) we need to dig out the private key System.out.println("before java.security.PrivateKey prk = (java.security.PrivateKey) ks.getKey(lf, lfkeypass)"); java.security.PrivateKey prk = (java.security.PrivateKey) ks.getKey(alias, lfkeypass); System.out.println("private key="+prk); System.out.println("setting signed key for keystore ks.setKeyEntry(lf_signed, prk, lfstorepass, cchain)"); ks.setKeyEntry("lf_signed", prk, lfstorepass, cchain); System.out.println("Store keystore to file"); java.io.FileOutputStream server_key_file = new java.io.FileOutputStream(original_keystoreFile); ks.store(server_key_file, keystorePass.toCharArray()); server_key_file.close(); } catch(java.security.GeneralSecurityException security_exception) { System.out.println("************************************************************************************************************"); System.out.println("* GeneralSecurityException has been thrown message="+security_exception.getMessage()); System.out.println("************************************************************************************************************"); } catch(java.io.IOException ioe) { System.out.println("************************************************************************************************************"); System.out.println("* IOException has been thrown message="+ioe.getMessage()); System.out.println("************************************************************************************************************"); } catch(java.lang.SecurityException security_excp) { System.out.println("************************************************************************************************************"); System.out.println("* SecurityException has been thrown message="+security_excp.getMessage()); System.out.println("************************************************************************************************************"); } System.out.println("returning SSLClient client="+client); return client; } ¡Saludos Cordiales desde las Americas!Martín
From: oscas...@hotmail.com To: java-user@axis.apache.org Subject: RE: Relative path keystore Axis2 Date: Thu, 28 Apr 2016 13:05:22 +0200 Hi Robert: Thank you very much for pointing me. I have performed the following code: KeyStore theKeystore = null; try { InputStream theKeystoreInputStream = ClassLoader.getSystemResourceAsStream("keysdata.jks"); theKeystore = KeyStore.getInstance("JKS"); theKeystore.load(theKeystoreInputStream, null); theKeystoreInputStream.close(); } catch (KeyStoreException ex) { java.util.logging.Logger.getLogger(AsnefWS.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { java.util.logging.Logger.getLogger(AsnefWS.class.getName()).log(Level.SEVERE, null, ex); } catch (NoSuchAlgorithmException ex) { java.util.logging.Logger.getLogger(AsnefWS.class.getName()).log(Level.SEVERE, null, ex); } catch (CertificateException ex) { java.util.logging.Logger.getLogger(AsnefWS.class.getName()).log(Level.SEVERE, null, ex); } And as far as I have debugged it, theKeystore is not null. Reaching this point, I have been trying to perform code to use theKeystore but unfortunately I didn´t reach the solution. I have surfing on google, and I found some examples using a SecureSocketFactory. I have done my own SecureSocketFactory and I have told Axis like this AxisProperties.setProperty("axis.socketSecureFactory","solvenciacenter.webservice.impl.MyCustomSSLSocketFactory"); My call to the web service looks like: IcTransactionServiceServiceStub service = new IcTransactionServiceServiceStub(axisContext, endpointURL); org.apache.axis2.transport.http.HttpTransportProperties.ProxyProperties HTTPProxyProperties = new org.apache.axis2.transport.http.HttpTransportProperties.ProxyProperties(); HTTPProxyProperties.setProxyName(IberdrolaConfigurationManager.getProperty("ws.proxy.host")); HTTPProxyProperties.setProxyPort(Integer.parseInt(IberdrolaConfigurationManager.getProperty("ws.proxy.port"))); HTTPProxyProperties.setUserName(proxyUser); HTTPProxyProperties.setPassWord(proxyPassword); org.apache.axis2.client.Options options = service._getServiceClient().getOptions(); options.setProperty("PROXY", HTTPProxyProperties); respuesta = service.submit(peticionA); And I´m still getting the same error about not finding the certificate. Could you please point me what I´m understanding wrong? Thank you very much Kind regards > Date: Wed, 27 Apr 2016 12:54:36 -0300 > Subject: Re: Relative path keystore Axis2 > From: robertlazar...@gmail.com > To: java-user@axis.apache.org > > On Wed, Apr 27, 2016 at 12:25 PM, Oscar Rugama <oscas...@hotmail.com> wrote: > > Hi all: > > > > I'm developing a web service using axis2 & tomcat . > > > <snip> > > My project could be like that, so at first glance my keystore is placed at > > the what I thought is the root level, so just writing > > > > System.setProperty("javax.net.ssl.keyStore", "keysdata.jks"); > > > > > > I thought it should look in the root level. But nothing works (I mean an > > absolute path yes it works) > > > > I would try to use some form of getResourceAsSteam() . Lots of ways to > do that. At the axis2 level, you should be able to do something like: > > MessageContext.getCurrentMessageContext().getAxisService().getClassLoader().getResourceAsSteam("keysdata.jks"); > > - R > > --------------------------------------------------------------------- > To unsubscribe, e-mail: java-user-unsubscr...@axis.apache.org > For additional commands, e-mail: java-user-h...@axis.apache.org >