【发布时间】:2017-12-21 08:10:49
【问题描述】:
我想在 Java 中实现一个 DTLS 1.0 客户端,在谷歌搜索之后我发现JSSERefGuide 表示以下内容:
JSSE API 能够支持 SSL 版本 2.0 和 3.0 以及 TLS 1.0版。这些安全协议封装了一个正常的 双向流套接字,JSSE API 增加透明支持 用于身份验证、加密和完整性保护。 JSSE JDK 附带的实现支持 SSL 3.0、TLS(1.0、1.1、 和 1.2)和 DTLS(版本 1.0 和 1.2)。 它不实现 SSL 2.0.
所以我认为我可以在不使用任何库(例如 BouncyCastle)的情况下用纯 Java 实现它
但是当我尝试运行时(以及其他一些,如 DTLSv1.2、DTLSv1...):
final SSLContext sslContext = SSLContext.getInstance("DTLSv1.0", "SunJSSE");
它抛出:
Exception in thread "main" java.security.NoSuchAlgorithmException: no such algorithm: DTLSv1.0 for provider SunJSSE
at sun.security.jca.GetInstance.getService(GetInstance.java:87)
at sun.security.jca.GetInstance.getInstance(GetInstance.java:206)
at javax.net.ssl.SSLContext.getInstance(SSLContext.java:199)
而例如以下工作:
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2", "SunJSSE");
列出所有安全提供程序我根本找不到 DTLS 的东西。
那么实际上有 DTLS 实现吗?如果是这样,你应该如何使用它?
【问题讨论】:
-
好问题。标准名称页面中未提及 DTLS。
-
我认为这是网站的一个小故障;我几年前下载的文档包在这里有所不同。页面中间“支持类和接口”的表格正确显示了 SSL3、TLS1、1.1、1.2 用于 8 和 7,对于 6,TLS1.1 和 1.2 仅在 6u111 和 6u121 (即在付费计划中)或 OpenJDK)。同上“标准名称”,例如docs.oracle.com/javase/8/docs/technotes/guides/security/… et pred.