我试图使用TLS在端口25上使用JavaMail发送邮件(没有SSL),但使用自己的信任库(因为原始的仙人掌信任库不包含所需的证书,而且我不想修改默认的信任存储)。我有能够使用TLS使用系统信任存储发送邮件的代码,方法是设置
mail.smtp.starttls.enable=true属性,同时,设置
System.setProperty("javax.net.ssl.trustStore", ...) 当连接安全运行时,指向正确的信任存储库。因为它是普通端口25,所以我也不需要设置任何socketFactory属性(和实现)。我可以使用TLS在25端口使用系统信任库发送邮件。
但是..。切换系统属性以建立正确的信任存储是有点愚蠢的,特别是在服务器上,当我不知道其他代码想发送邮件时,并且可能也需要使用系统属性时,通常:我正在寻找另一种解决方案,既不修改系统信任存储(仙人掌文件,复制它和修改副本是可以的!)也没有当前设置它所需的系统属性。
我已经尝试过的:
"javax.net.ssl.trustStore" system属性以指向我自己的信任存储文件。工作得很好,但我也不想修改系统属性,因为我的代码运行在服务器上,我不知道在那里运行的其他代码是什么,并且需要完整的属性。即使保存以前的状态和还原,也不能真正防止其他线程在修改该属性时使用该属性,因此我不太喜欢这个解决方案。所以..。简而言之:有人知道我如何在端口25上使用到邮件服务器的不安全连接,打开TLS (通过设置邮件属性),这样可以在内部保护连接并使用我自己的信任存储文件,而无需修改仙人掌或系统属性?也许有一种类似于socketFactory属性的方法,它只在不安全的连接安全时使用?
发布于 2012-05-30 07:40:36
哇哦..。找到了..。有两个socketFactory属性可以传递。一个用于SSL,另一个用于非ssl工厂。
发布于 2011-03-01 01:09:33
使用-Djavax.net.ssl.trustStore=启动您的应用程序..。
然后,它将只与您的java应用程序相关,而不涉及其他系统属性。
https://stackoverflow.com/questions/4345514
复制相似问题