Note that there are some explanatory texts on larger screens.

plurals
  1. POJava Webstart Truststore SSL
    primarykey
    data
    text
    <p>Need some guidance. </p> <p>I have java webstart app and I want it to connect to a server via SSL.just adding a property like:System.setProperty("javax.net.ssl.trustStore","my.keystore");But since a JAWS program is downloaded from server didn't work and don't have a my.keystore on local file system. So decided to distribute the certificate to all clients.I did the following and it worked.</p> <ol> <li>Read this trust store as a stream (use getResourceAsStream method).</li> <li>Save it in any file on the client machine (sometemp)</li> <li>Call System.setProperty ("javax.net.ssl.trustStore", trustStorePath);</li> </ol> <p>But I am sure there must be better solutions than this.. Any ideas to make it better? </p> <pre><code>public boolean validateUserFromActiveDirectory(String userId) { final String MEMBER_GROUP = "CN=asdadasd,OU=asdasdasd Accounts,OU=adasdas,OU=asdasdas,DC=asdasdas,DC=asdasdas,DC=adasdasd,DC=asdasdasd"; String employeeNumber = ""; final String LDAP_INIT_CTX = "com.sun.jndi.ldap.LdapCtxFactory"; final String LDAP_URL = "ldap://xx-ssssssss.eee.eee.eeeee.eeeee:636"; final String MY_ATTRS[] = { "employeeNumber" }; String adminPassword = "somepassword"; String securityProtocol = "ssl"; boolean isValidUser = false; try { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, LDAP_INIT_CTX); env.put(Context.PROVIDER_URL, LDAP_URL); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.REFERRAL, "follow"); env.put(Context.SECURITY_PRINCIPAL, MEMBER_GROUP); env.put(Context.SECURITY_CREDENTIALS, adminPassword); env.put(Context.SECURITY_PROTOCOL, securityProtocol); //C:\Documents and Settings\yourusername\Local Settings\Temp File tf = File.createTempFile("someTruststore", ".jks"); tf.deleteOnExit(); byte buffer[] = new byte[0x1000]; ClassLoader cl = JNDI.class.getClassLoader(); InputStream in = cl.getResourceAsStream( "someTruststore.jks"); FileOutputStream out = new FileOutputStream(tf); int cnt; while ((cnt = in.read(buffer)) != -1) out.write(buffer, 0, cnt); in.close(); out.close(); System.setProperty("javax.net.ssl.trustStore", tf .getAbsolutePath()); DirContext context = new InitialLdapContext(env, null); SearchControls searchControls = new SearchControls(); searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration results = context.search( "XX=ent,XX=abc,XX=aaaaa,XX=aaaa", "(sAMAccountName=" + userId + ")", searchControls); if (results != null &amp;&amp; results.hasMore()) { //some logic } } } catch (Exception e) { e.printStackTrace(); } return isValidUser; } </code></pre> <p>-Padur ===========================**=============</p> <pre><code>/** </code></pre> <p>* */</p> <pre><code>package util; /** * @author spaduri * */ import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import javax.net.SocketFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; public class CustomSSLSocketFactory extends SSLSocketFactory { private SSLSocketFactory factory; public CustomSSLSocketFactory() { try { SSLContext sslcontext = null; // Call getKeyManagers to get suitable key managers KeyManager[] kms=getKeyManagers(); if (sslcontext == null) { sslcontext = SSLContext.getInstance("SSL"); sslcontext.init(kms, new TrustManager[] { new CustomTrustManager() }, new java.security.SecureRandom()); } factory = (SSLSocketFactory) sslcontext.getSocketFactory(); } catch (Exception ex) { ex.printStackTrace(); } } public static SocketFactory getDefault() { return new CustomSSLSocketFactory(); } public Socket createSocket(Socket socket, String s, int i, boolean flag) throws IOException { return factory.createSocket(socket, s, i, flag); } public Socket createSocket(InetAddress inaddr, int i, InetAddress inaddr1, int j) throws IOException { return factory.createSocket(inaddr, i, inaddr1, j); } public Socket createSocket(InetAddress inaddr, int i) throws IOException { return factory.createSocket(inaddr, i); } public Socket createSocket(String s, int i, InetAddress inaddr, int j) throws IOException { return factory.createSocket(s, i, inaddr, j); } public Socket createSocket(String s, int i) throws IOException { return factory.createSocket(s, i); } public String[] getDefaultCipherSuites() { return factory.getSupportedCipherSuites(); } public String[] getSupportedCipherSuites() { return factory.getSupportedCipherSuites(); } protected KeyManager[] getKeyManagers() throws IOException, GeneralSecurityException { // First, get the default KeyManagerFactory. String alg=KeyManagerFactory.getDefaultAlgorithm(); KeyManagerFactory kmFact=KeyManagerFactory.getInstance(alg); // Next, set up the KeyStore to use. We need to load the file into // a KeyStore instance. ClassLoader cl = CustomSSLSocketFactory.class.getClassLoader(); // read the file someTrustStore from the jar file from a classpath InputStream in = cl.getResourceAsStream("ssl/someTruststore.jks"); //FileInputStream fis=new FileInputStream(adentTruststore.jks); KeyStore ks=KeyStore.getInstance("jks"); ks.load(in, null); in.close(); // Now we initialise the KeyManagerFactory with this KeyStore kmFact.init(ks, null); // And now get the KeyManagers KeyManager[] kms=kmFact.getKeyManagers(); return kms; } } </code></pre> <hr> <pre><code>package util; import java.security.cert.X509Certificate; import javax.net.ssl.X509TrustManager; public class CustomTrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] cert, String authType) { return; } public void checkServerTrusted(X509Certificate[] cert, String authType) { return; } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } </code></pre> <p>Laz appreciate your patience, trying to learn when I get some time. I started writing my own CustomSSLSocketFactory..right now I am bypassing security...based on the example by platinum solutions.If I do that ...will the information pass as a clear text on the network?</p> <p>Now I wonder what should I do with the truststore file I am having "sometruststore.jks" file. What should I do with that ..Do I have wrie my own custom trustmanager software ? Please guide me in correct direction.</p> <p>-padur</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload