簡體   English   中英

如何讓TLS與java一起工作?

[英]How to make TLS work with java?

我開發了一個使用TCP套接字的應用程序。

現在我希望它能與TLS連接一起使用。

我現在搜索了一些資源2天,但沒有什么看起來像是關於如何實現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 home之后的'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 for ServerSocketFactorySSLSocketFactory for SSLServerSocketFactory

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM