Comment certifier un server de messagerie imap auto-signé

Ma tâche est de récupérer les courriels d'un server de messagerie imaps à l'aide de Java, de sorte que je dois authentifier le server de messagerie en utilisant un certificate approprié. Il semble toutefois que ce server de messagerie utilise un certificate auto-signé qui n'est pas inclus dans le truststore (?) Par défaut. D'après ce que j'ai trouvé ici , les propriétés du système javax.net.ssl.trustStore et javax.net.ssl.trustStorePassword doivent être définies. L'exemple est donné:

 System.setProperty("javax.net.ssl.trustStore","clientTrustStore.key"); System.setProperty("javax.net.ssl.trustStorePassword","qwerty"); 

Ma question est de savoir comment puis-je get cette clientTrustStore.key et le mot de passe correspondant? Est-ce quelque chose que je peux me générer car je connais les détails du server de messagerie ou est-ce quelque chose qui devrait être fourni par le service informatique qui conserve ce server de messagerie?

Le mot de passe truststore n'est pas nécessaire pour lire le truststore.

Vous devrez créer un truststore qui se fait habituellement avec l'utilitaire keytool . Vous devrez get le certificate public du server IMAPS, ce qui peut se faire de plusieurs façons. Le package openssl contient plusieurs outils qui vous permettront d'save le certificate. De nombreux utilitaires de messagerie, tels que Thunderbird, vous permettront d'exporter le certificate. Vous devriez pouvoir get le certificate en activant le debugging ssl et en vous connectant à une class simple. Une fois que vous avez ce certificate, importez-le dans un nouveau magasin de keys à l'aide de l'utilitaire keytool .

Si vous êtes sur un réseau sécurisé, vous pouvez simplement définir la propriété -Dtrust_all_cert=true et ignorer le problème du truststore. Cela vous rend vulnérable aux attaques de l'homme dans le milieu. Cependant, il s'agit d'un travail pragmatique pour les certificates auto-signés, s'il s'agit d'une récupération ponctuelle. Vous pouvez également le faire dans votre code.

Il y a des questions connexes qui vous indiqueront la bonne direction:

https://stackoverflow.com/questions/2642777/trusting-all-certificatees-using-httpclient-over-https https://stackoverflow.com/questions/1219208/is-it-possible-to-get-java-to -ignore-the-trust-store-and-just-accept-whatever

Vous devez get le certificate de server public (à partir de l'administrateur du server ou, par exemple, avec openssl s_client -starttls imap -connect imap-server:143 ), puis utilisez l'utilitaire java keytool pour créer votre propre magasin de confiance où vous pouvez append cela et vous envoyez ce magasin de keys avec votre code.

Dans le cas où le certificate du server est signé par une autorité de certificateion (interne) au lieu d'un certificate de server auto-signé, vous ajoutez les certificates CA (par exemple avec openssl s_client -starttls imap -showcerts -connect imap-server:143 ) dans votre magasin en fiducie