Dne 25.11.2010 17:58, el.wond...@centrum.cz napsal(a):

Ahoj Javisti. Potreboval bych poradit s problemem, kdy je potreba se 
autentizovat/autorizovat LDAPem pres SSL za pouziti certifikatu pomoci Spring 
security. Od zakaznika jsem dostal certifikaty, ktere mam pouzit. Vubec 
netusim, jak a hlavne kam se ty certifikaty musi nacpat(JDK, Tomcat,...??), aby 
se pri autentizaci ty certifikaty pouzili. Muzete mi nekdo poradit? Popripade 
hodit nejaky link s prikladem.

Předpokládám, že se tím myslí klientské SSL certifikáty pro přístup k LDAP 
serveru,
vůči kterému se ověří username a heslo uživatele, tj. to co je popsáno na
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ldap.html#ldap-context-source
a ne třeba klientský SSL certifikát v uživatelově browseru, to by byla úplně 
jiná pohádka.

Spring Security jsem nepoužíval, jenom Spring LDAP, ale podle toho popisu 
soudím,
že je třeba si vytvořit vlastní implementaci AbstractContextSource, viz
http://static.springsource.org/spring-ldap/docs/1.3.x/apidocs/index.html?org/springframework/ldap/core/support/AbstractContextSource.html
která se k připojí k LDAP serveru a použije přitom SSL certifikát.

V něm je třeba se správně autentizovat, popis je na
http://download.oracle.com/javase/jndi/tutorial/ldap/security/ssl.html
v části "Using Custom Sockets". Je třeba si vytvořit SslSocketFactory, která
dokáže předložit klientský SSL certifikát. To se dělá zhruba takto:

        SSLContext sc = SSLContext.getInstance("SSL");
        TrustManager[] myTrustManager = new TrustManager[]{
                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }

                    public void checkClientTrusted(X509Certificate[] certs, 
String authType) {
                        //není potřeba u klienta
                    }

                    public void checkServerTrusted(X509Certificate[] certs, 
String authType) {
                        //jen pokud chci ověřovat server
                    }
                }
        };
        KeyManager[] myKeyManager = new KeyManager[] {
                new X509KeyManager() {
                    public String[] getClientAliases(String s, Principal[] 
principals) {
                    }

                    public String chooseClientAlias(String[] strings, 
Principal[] principals, Socket socket) {
                    }

                    public String[] getServerAliases(String s, Principal[] 
principals) {
                    }

                    public String chooseServerAlias(String s, Principal[] 
principals, Socket socket) {
                    }

                    public X509Certificate[] getCertificateChain(String s) {
                    }

                    public PrivateKey getPrivateKey(String s) {
                    }
                }
        };
        sc.init(myKeyManager, myTrustManager, new java.security.SecureRandom());
        SSLSocketFactory sslSocketFactory = sc.getSocketFactory();

samozřejmě je třeba naimplementovat metody pro TrustManager a KeyManager tak,
aby se ověřil saerver a předložil klientský SSL certifikát.

Makub
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Supercomputing Center Brno             Martin Kuba
Institute of Computer Science    email: ma...@ics.muni.cz
Masaryk University             http://www.ics.muni.cz/~makub/
Botanicka 68a, 60200 Brno, CZ     mobil: +420-603-533775
--------------------------------------------------------------

Reply via email to