2012-02-02 78 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