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); } |
|