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:

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