繁体   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