首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaMail: TLS在25端口上可能有单独的信任库吗?

JavaMail: TLS在25端口上可能有单独的信任库吗?
EN

Stack Overflow用户
提问于 2010-12-03 12:28:43
回答 2查看 2.2K关注 0票数 2

我试图使用TLS在端口25上使用JavaMail发送邮件(没有SSL),但使用自己的信任库(因为原始的仙人掌信任库不包含所需的证书,而且我不想修改默认的信任存储)。我有能够使用TLS使用系统信任存储发送邮件的代码,方法是设置

代码语言:javascript
复制
mail.smtp.starttls.enable=true

属性,同时,设置

代码语言:javascript
复制
System.setProperty("javax.net.ssl.trustStore", ...) 

当连接安全运行时,指向正确的信任存储库。因为它是普通端口25,所以我也不需要设置任何socketFactory属性(和实现)。我可以使用TLS在25端口使用系统信任库发送邮件。

但是..。切换系统属性以建立正确的信任存储是有点愚蠢的,特别是在服务器上,当我不知道其他代码想发送邮件时,并且可能也需要使用系统属性时,通常:我正在寻找另一种解决方案,既不修改系统信任存储(仙人掌文件,复制它和修改副本是可以的!)也没有当前设置它所需的系统属性。

我已经尝试过的:

  • 设置自己的SSL socketFactory,并使用自己的密钥管理器加载另一个信任库。如果不需要在端口25上发送,但我已经可以在端口465上启动一个安全连接,这将是绝对完美的。但是..。我不能这样做,这样做最终导致套接字异常,因为我试图安全地连接到不受保护的邮件服务器。
  • 试图设置自己的socketFactory,但在实际通信中使用普通套接字。这基本上等同于根本不使用我自己的socketFactory,最终使用了系统仙人掌、trustStore、truststore、仙人掌系统信任存储文件。这是可行的,但我不想修改系统的信任存储,我可能没有写权限或密钥存储密码可以修改,等等。
  • 修改"javax.net.ssl.trustStore" system属性以指向我自己的信任存储文件。工作得很好,但我也不想修改系统属性,因为我的代码运行在服务器上,我不知道在那里运行的其他代码是什么,并且需要完整的属性。即使保存以前的状态和还原,也不能真正防止其他线程在修改该属性时使用该属性,因此我不太喜欢这个解决方案。

所以..。简而言之:有人知道我如何在端口25上使用到邮件服务器的不安全连接,打开TLS (通过设置邮件属性),这样可以在内部保护连接并使用我自己的信任存储文件,而无需修改仙人掌或系统属性?也许有一种类似于socketFactory属性的方法,它只在不安全的连接安全时使用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-30 07:40:36

哇哦..。找到了..。有两个socketFactory属性可以传递。一个用于SSL,另一个用于非ssl工厂。

票数 0
EN

Stack Overflow用户

发布于 2011-03-01 01:09:33

使用-Djavax.net.ssl.trustStore=启动您的应用程序..。

然后,它将只与您的java应用程序相关,而不涉及其他系统属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4345514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档