osu*_*lad 4 java udp jsse dtls
我想用 Java 实现 DTLS 1.0 客户端,经过一番谷歌搜索后,我发现JSSERefGuide说了以下内容:
JSSE API 能够支持 SSL 版本 2.0 和 3.0 以及 TLS 版本 1.0。这些安全协议封装了普通的双向流套接字,JSSE API 添加了对身份验证、加密和完整性保护的透明支持。JDK 附带的 JSSE 实现支持 SSL 3.0、TLS(1.0、1.1 和 1.2)和 DTLS(版本 1.0 和 1.2)。它不实现 SSL 2.0。
所以我想我可以用纯Java实现它而不使用任何库(例如BouncyCastle)
但是当我尝试运行(以及其他一些,如 DTLSv1.2、DTLSv1...)时:
final SSLContext sslContext = SSLContext.getInstance("DTLSv1.0", "SunJSSE");
Run Code Online (Sandbox Code Playgroud)
它抛出:
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)
Run Code Online (Sandbox Code Playgroud)
例如以下工作:
final SSLContext sslContext = SSLContext.getInstance("TLSv1.2", "SunJSSE");
Run Code Online (Sandbox Code Playgroud)
列出所有安全提供商,我根本没有发现任何 DTLS 内容。
那么实际上有 DTLS 实现吗?如果是的话你应该如何使用它?
小智 6
您可以使用https://github.com/AdoptOpenJDK/openjdk-jdk11/blob/master/test/jdk/javax/net/ssl/DTLS/DTLSOverDatagram.java(或https://github.com/twosigma/OpenJDK/ blob/master/test/jdk/javax/net/ssl/DTLS/DTLSOverDatagram.java,其相同)
对于因链接而杀死我之前的答案的人:即使链接中断,这也没有问题 - 因为查看链接,您将轻松看到 DTLSOverDatagram 是官方 open-jdk 11 测试的一部分 - 所以即使如果链接消失,您可以轻松找到其他来源。
虽然这些是 DTLS 实现的测试,但只需少量重构即可用作基于 (udp-) 数据报的 DTLS 的基础。对于客户端和服务器来说——事实上,它们几乎是一样的。