Gestion des certificats auto-signés

Récupération d’un certificat

Avec OpenSSL

Aprés avoir installé et lancé le programme, on peut récupérer des certificats pour différents protocoles :

http

s_client -connect smtp.gmail.com:465

ftp avec tls

s_client -connect qlf-ftpssl.pci.aw.atosorigin.com:20001 -starttls ftp

smtp avec tls

s_client -connect smtp.gmail.com:587 -starttls smtp

Création du certificat crt

Après avoir exécuté la commande, il faut copier les lignes depuis la ligne BEGIN CERTIFICATE (comprise) jusqu’à la ligne (END CERTIFICATE) puis un saut de ligne.

Il faut ensuite convertir le fichier obtenu en UTF-8 vec Notepad++.

Génération d’un keyStore Java (JKS)

C:\Program Files\Java\jdk1.8.0_121\bin>keytool -importcert
-trustcacerts -alias intermediate -file C:\FTP\myCert.crt
-keystore C:\FTP\keystore.jks

Lister les certificats présents dans un keyStore

keytool -v -list -keystore keystore.jks

Ajouter un certificat à un keyStore existant

keytool -import -alias "myCert" -file myCert.crt -keystore keystore.jks
 

Chargement du fichier JKS dans un objet KeyStore

KeyStore ks = KeyStore.getInstance("JKS");
Resource jks = new ClassPathResource("keystore.jks");
ks.load(jks.getInputStream(), "password_choisi_lors_de_la_creation_du_jks".toCharArray());

Utilisation avec RestTemplate pour des connexions SSL en REST

@Bean
public RestTemplate restTemplate() throws Exception {
    KeyStore ks = ...
    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
        new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
            .loadKeyMaterial(ks, passwordJks.toCharArray()).build(), NoopHostnameVerifier.INSTANCE);
    HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
    ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
    return new RestTemplate(requestFactory);
}