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 --------------------------------------------------------------