如何在Java项目中启用TLS?

2022-09-04 01:18:25

我开发了一个使用TCP套接字的应用程序。现在我希望它与TLS连接一起使用。

我搜索了一些资源2天,但没有任何东西看起来像是关于如何实现TLS的教程。

以下是我对我必须做的事情的理解:

  • 我必须将根 CA 导入到密钥库中
  • 我必须在我的密钥库/信任库中导入其他一些证书。

我找不到一个清晰的代码示例来解释真正该怎么做。

你能帮我一些客户端/服务器示例或其他有用的教程吗?(我已经尝试搜索“TLS java”,“TLS Java示例”,“TLS Java教程”等。但我找不到任何令人满意的东西。

提前感谢您的关注。


答案 1

有两种方法可以实现这一目标。

最简单的在于Java协议支持和对象。URL

但是,由于我认为您已经弄清楚了在为您处理所有TLS / SSL内容时为您提供清晰的文本输入流,因此我将采用“硬”方式:)new URL("https://www.google.com").openStream()

在我回答您的另一个问题之前:导入 CA.CA 证书位于 Java 家中的以下任一位置:

  • $JAVA_HOME/lib/security/cacerts(杰瑞)
  • $JAVA_HOME/jre/lib/security/cacerts(JDK;注意 Java 主页后面的“jre”)

对于这两个密码,默认密码都是“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

就这么简单。

如果您需要服务器套接字,则代码几乎相同,您只需要交换 和 。SocketFactoryServerSocketFactorySSLSocketFactorySSLServerSocketFactory

希望这有帮助。


答案 2