【发布时间】:2012-02-25 10:55:35
【问题描述】:
好的,所以我有一个点对点(一个主机上的客户端/服务器)设置(通过本地 LAN),这是使用 Java 网络框架 Netty。我使用原始 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 实现是在说“这是创建安全连接的基础,但我们忽略了真正使它们安全/经过身份验证的部分”。
我应该知道的任何其他指针/提示?
提前谢谢你。
【问题讨论】:
-
我已经阅读了很多(在网络上)与加密、身份验证、快速签名有关的内容.. 并不是所有的内容都真正沉入其中,只做数量。我不确定我是否有时间深入研究,尤其是当它的一半已经在 Netty 中实现时;我主要是在寻找最后一点(证书部分)
-
目前尚不清楚您将如何在对等方之间建立信任。这似乎是您系统中缺少的主要元素。
-
@Bruno,我认为这是正确的。我首先关注的是公钥/私钥加密,然后转向保护整个传输过程,而不是仅仅通过不安全的连接发送加密数据(对吗?)。我想这就是我需要帮助的地方。
-
听起来您正在查看消息级别的安全性,而您现在正在查看传输级别的安全性。无论哪种方式,您都应该了解 PKI(和/或 Web-of-Trust/PGP)和身份管理。
标签: java encryption ssl tcp netty