SSLSocketFactory is null. This can occur if javax.net.ssl.SSLSocketFactory.getDefault() is called t

问题 :

tmcat运行正常,移植到was上时报: SSLSocketFactory is null. This can occur if javax.net.ssl.SSLSocketFactory.getDefault() is called to create a socket and javax.net.ssl.* properties are not set.

代码如下:

LdapContext ctx;
    public test1() {
        Hashtable env = new Hashtable();
        try {
            // 设置信任证书
            System.setProperty("javax.net.ssl.trustStore",System.getProperty("java.home")+"/lib/security/cacerts");
            System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
            env.put(Context.SECURITY_PROTOCOL, "ssl");
            env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, "ldaps://10.0.7.5:636");
            env.put(Context.SECURITY_AUTHENTICATION, "simple");
            env.put(Context.SECURITY_PRINCIPAL,"CN=*,OU=*,DC=sinokorealife,DC=*");
            env.put(Context.SECURITY_CREDENTIALS, "Sinokorealife_AD");
            ctx = new InitialLdapContext(env, null);
            System.out.println("管理员连接成功");
            String password="123456";
            String username="test";
            ModificationItem[] mods = new ModificationItem[1];
            String newQuotedPassword = "\"" + password + "\"";
            byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
            mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,new BasicAttribute("unicodePwd",newUnicodePassword));
            ctx.modifyAttributes("CN="+username+",OU=SINOKOREALIFE,DC=sinokorealife,DC=biz", mods);    
            ctx.close();
            if(check(username,password))
            {
                System.out.println("成功");
            }
        } catch (NamingException e) {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }     

在       ctx = new InitialLdapContext(env, null); 报SLLSocketFactory is null

原因判定:

1 .在tomcat采用sun的jvm,而在was上则采用的是ibm的jvm,两者功能上大体相同,但是细节方面还是有略微差异,所以可能是兼容性的问题导致System.setProperty()没有  被读取。

解决方法:

System.setProperty("javax.net.ssl.trustStore",System.getProperty("java.home")+"/lib/security/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

更换为

env.put("javax.net.ssl.trustStore","System.getProperty("java.home")+"/lib/security/cacerts"");

env.put("javax.net.ssl.trustStorePassword", "changeit");

另外

env.put(Context.SECURITY_PROTOCOL, "ssl");与

env.put(Context.PROVIDER_URL, "ldaps://10.0.7.5:636");冲突

修改为

env.put(Context.SECURITY_PROTOCOL, "ssl");

env.put(Context.PROVIDER_URL, "ldap://10.0.7.5:636");

你可能感兴趣的:(SSLSocketFactory is null. This can occur if javax.net.ssl.SSLSocketFactory.getDefault() is called t)