簡體   English   中英

Java:TCP加密,SSL和Netty

[英]Java: TCP Encryption, SSL and Netty

好的,我有一個點對點(一個主機上的客戶端/服務器)設置(通過本地局域網),這是使用Netty,一個Java網絡框架。 我使用原始TCP / IP(如在,沒有HTTP)進行通信和傳輸。

目前,所有數據都以“純文本”傳輸,我正在開始保護此類傳輸數據的過程。

我已經很好地閱讀了加密/實踐等類型(但可能只是觸及表面並且已經融化了我的大腦)

Netty包含一個SSL實現,有一些鏈接可以更好地解釋自己:

http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/securechat/package-summary.html

在“SecureChatTrustManagerFactory”里面有兩種方法:

          public void checkClientTrusted(
                  X509Certificate[] chain, String authType) throws CertificateException {
              // Always trust - it is an example.
              // You should do something in the real world.
              // You will reach here only if you enabled client certificate auth,
              // as described in SecureChatSslContextFactory.
              System.err.println(
                      "UNKNOWN CLIENT CERTIFICATE: " + chain[0].getSubjectDN());
          }

          public void checkServerTrusted(
                 X509Certificate[] chain, String authType) throws CertificateException {
             // Always trust - it is an example.
              // You should do something in the real world.
              System.err.println(
                      "UNKNOWN SERVER CERTIFICATE: " + chain[0].getSubjectDN());
          }

“SecureChatKeyStore”包含我可以看到的硬編碼證書。

所以我的問題是:

  • 我需要生成證書嗎?
  • 如果是這樣,每次運行應用程序?
  • 如果是這樣,每個客戶?
  • 如果是這樣,該認證是否在客戶端和服務器之間傳遞?
  • 如果是這樣,它是如何安全地完成的?

我不完全確定從哪里開始。 從我可以看到的Netty實現是說“這是創建安全連接的基礎,但我們遺漏了實際使它們安全/認證的部分”。

我應該知道的任何其他指針/提示?

先感謝您。

正如其他人所指出的,應用程序安全性和傳輸鏈接安全性之間存在差異。 我認為你的目標是最后一個,因為你主要提到加密。 加密提供了竊聽者的機密性。 此外,由於SSL還包含消息身份驗證代碼,因此它還可以保護第三方在傳輸過程中更改數據包。 收到消息后,它不提供任何消息保護。

您可能已經在互聯網上注意到HTTPS連接,您至少需要一個服務器證書。 此證書可以保持靜態,但應包含到期日,您應該更換證書。 客戶端應該信任服務器證書(例如,通過將其作為資源嵌入)。 您還可以將SSL與客戶端身份驗證一起使用,但這意味着您需要有足夠的安全措施來保護客戶端上的私鑰安全。

最好只從“自簽名”服務器證書開始。 這是你需要在checkServerTrusted方法中信任的checkServerTrusted 基本上,鏈只是一個證書。

暫無
暫無

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

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