我开发了一个使用TCP套接字的应用程序。
现在我希望它可以使用TLS连接。
我现在搜索了一些资源2天,但没有什么看起来像是关于如何实现TLS的教程。
以下是我对所要做的事情的理解:
我找不到能够解释真正做什么的明确代码示例。
你能帮我一些客户端/服务器示例或其他有用的教程吗? (我已经尝试搜索" TLS java"," TLS Java示例"," TLS Java教程" ....但我找不到令人满意的东西。)
提前感谢您的关注。
答案 0 :(得分:19)
实现这一目标有两种方法。
最简单的是java协议支持和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;请注意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
就这么简单。
如果您需要服务器套接字,代码几乎相同,您只需要为SocketFactory
和ServerSocketFactory
交换SSLSocketFactory
SSLServerSocketFactory
希望这会有所帮助