2012-02-02 84 views
2

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

當前所有數據都以「純文本」傳輸,我開始保護這些傳輸數據的過程。

我有類型的加密/實踐等良好的讀取(但可能只碰了面和已融化我的大腦)

Netty中包括SSL implemntation,繼承人一些聯繫,希望能夠更好地解釋自己:

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

內部 「SecureChatTrustManagerFactory」 有2種方法:

  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實現中可以看出:「這是創建安全連接的基礎,但我們忽略了實際上使它們安全/認證的部分」。

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

預先感謝您。

+0

我讀過很多東西(在網上)與加密,身份驗證,簽署非常迅速..不是所有的真正沉沒,做的金額。我不確定我是否有時間深入,特別是當它的一半已經在Netty中實現時;我主要是在尋找最後一點(證書部分) – Metalstorm 2012-02-02 19:21:01

+0

目前還不清楚你將如何在同伴之間建立信任。這似乎是您的系統中主要缺失的元素。 – Bruno 2012-02-02 19:51:38

+0

@布魯諾,我認爲是對的。我首先查看公鑰/私鑰加密,然後轉換到保護整個傳輸過程,而不僅僅是通過不安全的連接發送加密數據(是嗎?)。我認爲這是我需要幫助的地方。 – Metalstorm 2012-02-02 19:59:44

回答

0

正如其他人指出的那樣,應用程序安全性和傳輸鏈路安全性之間存在差異。我認爲你主要是提到加密,最後一個是你的目標。加密提供竊聽者的保密性。另外,由於SSL也包含了消息認證碼,它還會在運輸過程中爲第三方提供數據包保護。一旦收到消息,它不提供任何保護。

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

這可能是以「自簽名」服務器證書開始的最佳方式。這就是你需要信任checkServerTrusted方法的人。基本上,這個鏈條就是一個證書。

+0

請注意,您需要客戶端身份驗證來驗證客戶端,換句話說,儘管這樣可以保護傳輸中的郵件,但服務器身份驗證本身意味着任何人都可以成爲客戶端,至少在傳輸協議級別上(Web客戶端通常使用用戶名/密碼或cookies來爲客戶端添加應用程序級別認證)。 – 2012-02-04 20:33:01