2

我正在研究保护网络通信(UDP 和 TCP)。看起来“使用 IPSec”是一个很好的解决方案。我知道这是在较低级别实现的,应用程序不需要看到它。但是,我希望我的 Java 应用程序是安全的,并且知道它是安全的。

所以在实践中,我必须做什么才能在 Java 应用程序中使用 IPSec?我还使用 DatagramSocket/java.net.Socket.Socket 吗?我需要对 System.getSecurityManager() 做些什么吗?我是否必须在操作系统(Windows XP 与亚马逊云通信)级别进行配置?

在某些时候,我需要检查/提供安全凭证。这是怎么做的?

我做了相当多的谷歌搜索,并在网络层看到了它是如何工作的。但是我没有找到任何利用 IPSec 的示例应用程序代码。

有人做过吗?

谢谢!

4

3 回答 3

2

好的,我找到了我正在寻找的信息。也许这个问题并没有明确说明我想要什么,但这就是我发现的:

IPSec 需要在操作系统上配置(过于简化)。您在两台机器之间建立了连接,然后让它们继续运行。你知道你有一个安全的连接,因为你只允许那台机器上的安全连接。如果您没有配置 IPSec,它将不安全,因此您只需要确保您这样做。

安全性可以是共享密钥或 X509 证书

还有一些有用的方法:

对于 linux http://www.ipsec-howto.org/x304.html

对于 Windows:http ://www.elandsys.com/resources/ipsec/wincert.html

于 2011-06-13T15:25:20.097 回答
1

你不能这样做——就像你说的那样,它处于较低的水平——低得多

“使用 SSL”不是一个好的解决方案有什么特别的原因吗?

于 2011-06-10T11:05:19.053 回答
1

扩展旧答案:假设必须在两个端点之间设置 IPSec,我们想知道它是否到位。如果发生 IPSec 加密,它可能是最好的解决方案(硬件加密,与机器上的其他服务集中共享的密钥),但如果没有应用 IPSec 加密,我们最好中止连接或使用应用程序协议-在发送敏感数据之前进行级别加密。

不幸的是,没有用于检测套接字上的 IPSec 的标准 API(并且任何用于执行此操作的 Java 都必须与本机系统调用交互)。此外,请注意,IPSec 可能会被路由沿途某处的路由器透明地应用,因此只有在操作系统内核应用它时才能检测到它。

蜜蜂:

  • WSAQuerySocketSecurity
  • setsockopt(sock, IPPROTO_IP, IP_SEC_OPT, &opts) 从 Solaris 8 开始(这里有很棒的教程
  • 令人震惊的是(?)Linux上未记录的IP_IPSEC_POLICY
  • FreeBSD 和 MacOS 上记录良好的 IP_IPSEC_POLICY(使用完善的 KAME 实现)。在 /usr/src 中搜索示例。
于 2013-05-29T14:26:07.523 回答