JSSE中是否有DTLS实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");

它抛出:

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实现?如果是这样你应该如何使用它?

答案

doc是正确的,因为没有DTLS协议,你会得到一个例外:https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#SSLContext

选择DTLS是在创建套接字时,因为它将是TCP或数据报类型之一。一开始,它看起来像:

DatagramSocket s = new DatagramSocket();
...

final SSLContext sslContext = SSLContext.getInstance("TLSv1.0", "SunJSSE");
sslContext.init(null, yourSSLTrustManager, null);

SSLSocketFactory factory = (SSLSocketFactory)sslContext.getSocketFactory();
SSLSocket daSocket = (SSLSocket) factory.createSocket(s, host, port, false);
另一答案

DTLS出现在JavaSE 9:SSLContext Algorihtm Names

以上是关于JSSE中是否有DTLS实现的主要内容,如果未能解决你的问题,请参考以下文章

JSSE编程基本代码

在 TOMCAT5.5 上 SSL 的 APR 实现和 SSL 的 JSSE 实现有啥区别

是否有在单个活动中处理多个片段的 Android 设计模式?

是否可以动态编译和执行 C# 代码片段?

DTLS协议中的509证书和密钥如何传输

Qt文档阅读笔记-DTLS server解析