Java:TCP加密、SSL和Netty

Java:TCP加密、SSL和Netty,java,encryption,ssl,tcp,netty,Java,Encryption,Ssl,Tcp,Netty,好的,我有一个对等(一台主机上的客户机/服务器)设置(通过本地局域网),这是使用Netty,一个Java网络框架。我使用原始TCP/IP(如中所示,没有HTTP)进行通信和传输 目前,所有数据都以“纯文本”传输,我正在开始保护这些传输数据的过程 我已经很好地阅读了各种类型的加密/实践等(但可能只是触及了表面,它已经融化了我的大脑) Netty包括一个SSL实现,这里有一些链接,希望能更好地解释我自己: 在“SecureChatTrustManagerFactory”中有两种方法:

好的,我有一个对等(一台主机上的客户机/服务器)设置(通过本地局域网),这是使用Netty,一个Java网络框架。我使用原始TCP/IP(如中所示,没有HTTP)进行通信和传输

目前,所有数据都以“纯文本”传输,我正在开始保护这些传输数据的过程

我已经很好地阅读了各种类型的加密/实践等(但可能只是触及了表面,它已经融化了我的大脑)

Netty包括一个SSL实现,这里有一些链接,希望能更好地解释我自己:

在“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还包含消息身份验证代码,它还将在传输过程中为第三方更改数据包提供保护。一旦收到消息,它不提供任何保护

正如您在internet上注意到的HTTPS连接,您至少需要一个服务器证书。此证书可以保持静态,但它应该包含一个到期日期,您应该在该日期更换证书。客户端应信任服务器证书(例如,通过将其作为资源嵌入)。您还可以将SSL与客户端身份验证一起使用,但这意味着您需要有足够的安全措施来确保客户端上的私钥安全


最好从“自签名”服务器证书开始。这就是您需要信任的
checkServerTrusted
方法。基本上,链就是一个证书。

我在网上读了很多关于加密、身份验证和签名的东西。。并不是所有的东西都能真正融入其中,而是尽可能多地去做。我不确定我是否有时间深入研究,尤其是在Netty中已经实现了一半的时候;我主要寻找最后一点(证书部分),不清楚如何在对等方之间建立信任。这似乎是你的系统中缺少的主要元素。@Bruno,我认为这是对的。我首先考虑的是公钥/私钥加密,然后过渡到保护整个传输过程,而不仅仅是通过不安全的连接发送加密数据(是这样吗?)。我想这就是我需要帮助的地方。听起来你在关注消息级安全性,而现在你在关注传输级安全性。无论哪种方式,您都应该阅读PKI(和/或信任网/PGP)和身份管理。请注意,您需要客户端身份验证来验证客户端,换句话说,尽管这将保护传输中的消息,但仅服务器身份验证就意味着任何人都可以成为客户端,至少在传输协议级别上是这样(当然,web客户端通常使用用户名/密码或cookies为客户端添加应用程序级身份验证)。