如何authentication一个自签名的imap电子邮件服务器

我的任务是使用Java从imaps电子邮件服务器中检索电子邮件,因此,我需要使用适当的证书对电子邮件服务器进行身份validation。 但似乎这个电子邮件服务器正在使用默认情况下不包含在信任库(?)中的自签名证书。 从我在这里find的,需要设置系统属性javax.net.ssl.trustStorejavax.net.ssl.trustStorePassword 。 给出的例子是:

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

我的问题是我如何获得这个clientTrustStore.key和相关的密码? 我知道电子邮件服务器的详细信息,还是应该由维护此电子邮件服务器的IT部门提供的东西,我可以自己生成这些东西吗?

读取信任库不需要信任库密码。

您将需要创build一个通常使用keytool实用程序完成的信任库。 您将需要从IMAPS服务器获取公共证书,这可以通过多种方式完成。 openssl包中有许多工具可以让你保存证书。 许多邮件工具(如Thunderbird)将允许您导出证书。 您应该能够通过启用ssldebugging和连接一个简单的类来获得证书。 获得此证书后,使用keytool实用程序将其导入新的密钥库。

如果您位于安全的networking上,则可以设置-Dtrust_all_cert=true属性并忽略信任库问题。 这让你容易受到中间人攻击。 但是,如果这是一次性检索,那么对于自签名证书来说这是一个务实的解决办法。 你也可以在你的代码中做到这一点。

有相关的问题会指出你正确的方向:

https://stackoverflow.com/questions/2642777/trusting-all-certificates-using-httpclient-over-https https://stackoverflow.com/questions/1219208/is-it-possible-to-get-java-to -ignore最信任存储和刚刚接受,无论

您需要获取公共服务器证书(无论是从服务器pipe理员还是使用openssl s_client -starttls imap -connect imap-server:143 ),然后使用java keytool实用程序创build您自己的信任存储,您可以在其中添加证书,然后用您的代码运送该密钥库。

如果服务器证书由(内部)CA签名而不是自签名服务器证书,则将CA证书(例如, openssl s_client -starttls imap -showcerts -connect imap-server:143 )添加到您的信任存储