Zugriff auf LDAP der Bundesnetzagentur
Problem: Ich möchte jede Nacht die neuesten qualifizierten Signaturen der akkreditierten Anbieter der Bundesnetzagentur runterladen und diese in einem Java-Keystore speichern!
Bundesnetzagentur
Lösung:
BouncyCastle downloaden und installieren Download
Einen Job anlegen:
01 | public class KeyStoreUpdateJob extends QuartzJobBean |
02 | { |
03 | private static final Logger logger = Logger.getLogger(KeyStoreUpdateJob. class ); |
04 |
05 | private KeyStore accreditedKeyStore; |
06 |
07 | @Override |
08 | protected void executeInternal(JobExecutionContext context) |
09 | throws JobExecutionException |
10 | { |
11 | accreditedKeyStore = KeyStore.getInstance( "JKS" ); |
12 | accreditedKeyStore.load( new FileInputStream( new File( "path_to_keystore" )), "password" .toCharArray()); |
13 |
14 | Builder builder = new X509LDAPCertStoreParameters.Builder( "ldap://ldap.nrca-ds.de:389" , "dc=ldap,dc=nrca-ds,dc=de" ); |
15 | CertStore ldapCertStrore = CertStore.getInstance( "LDAP" , builder.build(), "BC" ); |
16 |
17 | X509CertSelector selector = new X509CertSelector(); |
18 | //First we load all certificates from LDAP |
19 | try |
20 | { |
21 | Iterator iterator = ldapCertStrore.getCertificates(selector).iterator(); |
22 | while (iterator.hasNext()) |
23 | { |
24 | X509Certificate crl = (X509Certificate )iterator.next(); |
25 | accreditedKeyStore.setCertificateEntry(crl.getSubjectDN().getName(), crl); |
26 | } |
27 |
28 | //After that we save all in the keystore |
29 | FileOutputStream fos = null ; |
30 | try |
31 | { |
32 | fos = new FileOutputStream( new File( "path_to_keystore" )); |
33 | accreditedKeyStore.store(fos, "password" .toCharArray()); |
34 | fos.flush(); |
35 | fos.close(); |
36 | logger.info( "Keystore was updated with Certificates from LDAP(Netzagentur) and from Folder" ); |
37 |
38 | } catch (CertificateException e) |
39 | { |
40 | logger.error(e.getMessage()); |
41 | } finally |
42 | { |
43 |
44 | IOUtils.closeQuietly(fos); |
45 | } |
46 |
47 | } catch (CertStoreException e) |
48 | { |
49 | logger.error(e.getMessage()); |
50 |
51 | } |
52 | } |
53 | } |
Den Job in Spring verdrahten:
01 | < bean id = "keyStoreUpdateJob" class = "org.springframework.scheduling.quartz.JobDetailBean" > |
02 | < property name = "jobClass" value = "de.etss.core.event.KeyStoreUpdateJob" > |
03 | < property name = "jobDataAsMap" > |
04 | </ property > |
05 | </ property > |
06 |
07 | < bean id = "cronKeyStoreTrigger" class = "org.springframework.scheduling.quartz.CronTriggerBean" > |
08 | < property name = "jobDetail" ref = "keyStoreUpdateJob" > |
09 | < property name = "cronExpression" value = "59 59 23 * * ?" > |
10 | </ property > |
11 |
12 | < bean class = "org.springframework.scheduling.quartz.SchedulerFactoryBean" > |
13 | < property name = "triggers" > |
14 | < list > |
15 | < ref bean = "cronKeyStoreTrigger" > |
16 | </ ref > |
17 | </ list > |
18 | </ property > |
19 | </ bean ></ property ></ bean ></ bean > |