我开发了一个使用 TCP 套接字的应用程序。现在我希望它可以使用 TLS 连接。
我已经搜索了 2 天的一些资源,但没有任何内容看起来像是关于如何实现 TLS 的教程。
这是我对我必须做的事情的理解:
- 我必须在我的 keystore 中导入我的根 CA。
- 我必须在我的keystore/truststore 中导入一些其他证书。
我找不到一个清晰的代码示例来解释真正要做什么。
你能帮我做一些客户端/服务器示例或其他有用的教程吗? (我已经尝试搜索“TLS java”、“TLS Java 示例”、“TLS Java 教程”等。但我找不到任何令人满意的内容。)
预先感谢您的关注。
最佳答案
有两种方法可以实现。
最简单的在于 Java 协议(protocol)支持和 URL
对象。
但是因为我认为您已经知道 new URL("https://www.google.com").openStream()
在处理所有TLS/SSL 的东西给你,我会选择“困难”的方式:)
就在我回答您的其他问题之前:导入 CA。 CA 证书位于您的 Java 主目录中的以下任一位置:
$JAVA_HOME/lib/security/cacerts
(JRE)$JAVA_HOME/jre/lib/security/cacerts
(JDK;注意“jre” 在 Java 主页之后)
两者的默认密码都是“changeit”。
要列出其内容,您可以使用 keytool
命令:
$ keytool -list -keystore cacerts -storepass changeit
要添加新证书,只需使用 -import
子命令而不是 -list
。
那么现在让我们采用“困难”方式(客户端代码):
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocketFactory;
...
String host = "www.google.com";
int port = 443;
SocketFactory basicSocketFactory = SocketFactory.getDefault();
Socket s = basicSocketFactory.createSocket(host, port);
// s is a TCP socket
SSLSocketFactory tlsSocketFactory = SSLSocketFactory.getDefault();
s = tlsSocketFactory.createSocket(s, host, port, true);
// s is now a TLS socket over TCP
就这么简单。
如果您需要服务器套接字,代码几乎相同,您只需将 SocketFactory
换成 ServerSocketFactory
并将 SSLSocketFactory
换成 SSLServerSocketFactory
.
希望这对您有所帮助。
关于java - 如何在 Java 项目中启用 TLS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24868820/