如何使TLS与Java一起使用?

海治郎

我开发了一个使用TCP套接字的应用程序。

现在,我希望它可以使用TLS连接。

我搜索了两天的资源,但是没有什么看起来像是有关如何实现TLS的教程。

这是我对必须要做的事情的理解:

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

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

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

预先感谢您的关注。

塞伯

有两种方法可以实现此目的。

最简单的在于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”

要列出其内容,可以使用keytoolcommand:

$ 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

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何与Eclipse一起使用TortoiseSVN

来自分类Dev

如何与gradle一起使用JMH?

来自分类Dev

backpatching如何与标记一起使用?

来自分类Dev

getline如何与cin一起使用?

来自分类Dev

hashCode如何与Java中的HashMap一起使用

来自分类Dev

如何与JTextArea一起使用JScrollPane?

来自分类Dev

Rabbitmq无法与Java一起使用

来自分类Dev

如何与[if]一起使用[getElementById]?

来自分类Dev

如何使Mixitup与Wordpress一起使用?

来自分类Dev

如何与流星一起使用Prerenderio?

来自分类Dev

Java if + String不能一起使用

来自分类Dev

RESTful如何与PHP一起使用?

来自分类Dev

如何使__debugInfo与XDebug一起使用?

来自分类Dev

如何使Powermock与Dexmaker一起使用

来自分类Dev

将NET :: SMTP SSL / TLS与SOCKS一起使用

来自分类Dev

mongomock如何与电机一起使用?

来自分类Dev

指针如何与Java中的原始类型一起使用?

来自分类Dev

Heredocs如何与xargs一起使用?

来自分类Dev

如何指定与sbt 0.12.4一起使用的Java版本?

来自分类Dev

如何使PreferenceFragment与MainActivity一起使用

来自分类Dev

如何与默认包装一起使用?

来自分类Dev

如何使bbmustache与Elixir一起使用?

来自分类Dev

CoGroupByKey如何与DistingingFiredPanes一起使用?

来自分类Dev

Java if + String不能一起使用

来自分类Dev

如何指定与sbt 0.12.4一起使用的Java版本?

来自分类Dev

Java replaceAll操作如何与反斜杠一起使用?

来自分类Dev

JSON 对象如何与 Java 一起使用?

来自分类Dev

如何在java Android中将IF与Button一起使用?

来自分类Dev

如何将 TLS 证书放入 pod 以与 Prometheus helm chart 一起使用?