如何认证自签名 imap 电子邮件服务器

如何认证自签名 imap 电子邮件服务器

我的任务是使用 Java 从 imaps 电子邮件服务器检索电子邮件,因此作为客户端,我需要使用适当的证书对电子邮件服务器进行身份验证。然而,似乎该电子邮件服务器使用的是自签名证书,默认情况下不包含在信任库中(?)。据我发现这里,系统属性javax.net.ssl.trustStore需要javax.net.ssl.trustStorePassword设置。示例如下:

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

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

答案1

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

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

如果您处于安全网络中,则只需设置该-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-the-trust-store-and-just-accept-whatever

答案2

您需要获取公共服务器证书(从服务器管理员或例如使用openssl s_client -starttls imap -connect imap-server:143),然后使用 javakeytool实用程序创建您自己的信任库,您可以在其中添加该证书,并将该密钥库与您的代码一起发送。

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

相关内容