212.7. SSL の設定
必要なのは、カスタムソケットファクトリーを作成し、それを InitialDirContext Bean で参照することだけです。以下のサンプルを参照してください。
SSL 設定
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> <sslContextParameters xmlns="http://camel.apache.org/schema/blueprint" id="sslContextParameters"> <keyManagers keyPassword="{{keystore.pwd}}"> <keyStore resource="{{keystore.url}}" password="{{keystore.pwd}}"/> </keyManagers> </sslContextParameters> <bean id="customSocketFactory" class="zotix.co.util.CustomSocketFactory"> <argument ref="sslContextParameters" /> </bean> <bean id="ldapserver" class="javax.naming.directory.InitialDirContext" scope="prototype"> <argument> <props> <prop key="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/> <prop key="java.naming.provider.url" value="ldaps://lab.zotix.co:636"/> <prop key="java.naming.security.protocol" value="ssl"/> <prop key="java.naming.security.authentication" value="simple" /> <prop key="java.naming.security.principal" value="cn=Manager,dc=example,dc=com"/> <prop key="java.naming.security.credentials" value="passw0rd"/> <prop key="java.naming.ldap.factory.socket" value="zotix.co.util.CustomSocketFactory"/> </props> </argument> </bean> </blueprint>
カスタムソケットファクトリー
import org.apache.camel.util.jsse.SSLContextParameters; import javax.net.SocketFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManagerFactory; import java.io.IOException; import java.net.InetAddress; import java.net.Socket; import java.security.KeyStore; /** * The CustomSocketFactory. Loads the KeyStore and creates an instance of SSLSocketFactory */ public class CustomSocketFactory extends SSLSocketFactory { private static SSLSocketFactory socketFactory; /** * Called by the getDefault() method. */ public CustomSocketFactory() { } /** * Called by Blueprint DI to initialise an instance of SocketFactory * * @param sslContextParameters */ public CustomSocketFactory(SSLContextParameters sslContextParameters) { try { KeyStore keyStore = sslContextParameters.getKeyManagers().getKeyStore().createKeyStore(); TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); tmf.init(keyStore); SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(null, tmf.getTrustManagers(), null); socketFactory = ctx.getSocketFactory(); } catch (Exception ex) { ex.printStackTrace(System.err); /* handle exception */ } } /** * Getter for the SocketFactory * * @return */ public static SocketFactory getDefault() { return new CustomSocketFactory(); } @Override public String[] getDefaultCipherSuites() { return socketFactory.getDefaultCipherSuites(); } @Override public String[] getSupportedCipherSuites() { return socketFactory.getSupportedCipherSuites(); } @Override public Socket createSocket(Socket socket, String string, int i, boolean bln) throws IOException { return socketFactory.createSocket(socket, string, i, bln); } @Override public Socket createSocket(String string, int i) throws IOException { return socketFactory.createSocket(string, i); } @Override public Socket createSocket(String string, int i, InetAddress ia, int i1) throws IOException { return socketFactory.createSocket(string, i, ia, i1); } @Override public Socket createSocket(InetAddress ia, int i) throws IOException { return socketFactory.createSocket(ia, i); } @Override public Socket createSocket(InetAddress ia, int i, InetAddress ia1, int i1) throws IOException { return socketFactory.createSocket(ia, i, ia1, i1); } }