【问题标题】:SMTP client using BouncyCastle's lightweight TLS API使用 BouncyCastle 的轻量级 TLS API 的 SMTP 客户端
【发布时间】:2011-09-13 06:48:23
【问题描述】:

我需要为一个简单的基于 Java 的 SMTP 客户端添加 TLS 支持。客户端通过 java.net.Socket 实现 SMTP 协议,即它不使用 Java Mail 或其他高级 API。

我想使用BouncyCastle 的轻量级 TLS API 来完成这项任务。我一直在寻找示例,但找不到太多示例。谁能指点一下?

【问题讨论】:

  • 为什么?为什么不使用 JSSE?它已经内置了 10 年。
  • 这在没有 JSSE 的嵌入式硬件上运行。

标签: java ssl bouncycastle


【解决方案1】:

事实证明这比我预期的要容易得多。我可以通过修改原始 SMTP 客户端代码来建立与 SMTP 邮件服务器的安全 SSL 连接:

Socket s = new Socket(server, port);
InputStream is = s.getInputStream();
InputStream os = s.getOutputStream();
[...]

到这里:

Socket s = new Socket(server, port);
TlsProtocolHandler handler = new TlsProtocolHandler(s.getInputStream(),
                                                    s.getOutputStream());
handler.connect(new AlwaysValidVerifyer());
InputStream is = handler.getInputStream();
InputStream os = handler.getOutputStream();
[...]

服务器的证书还没有被验证(AlwaysValidVerifier 是一个可以接受任何东西的虚拟验证器)但这已经是一个好的开始。

【讨论】:

  • 我也必须这样做,使用 c# 版本的库。握手阶段一切正常,我可以访问证书,但之后我无法通过此安全连接正确发送/接收 http 消息。你遇到过任何问题吗?我正在尝试将处理程序提供的流与 DataWriter/DataReader 一起使用,但在对其异步操作执行“等待”时总是超时。您对可能出现的问题有任何想法吗?
  • 不知道,抱歉。以上对我来说适用于 SMTP+TLS,从未尝试过 HTTP。
猜你喜欢
  • 2013-05-05
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多