保护内部通信

大多数JEE容器,存储后端系统…提供了一种使用SSL来获得安全通信的方法。

为了得到这个,我不太清楚一些问题:

  1. 我需要每个连接点的证书吗? 我可以只使用一个并分享吗?
  2. 在生产环境中,我需要这些证书是CA根证书吗? 在testing或开发环境方面呢?
  3. 目前我所有的连接点(jee容器,存储系统)都运行在同一台机器上。 所以,我认为没有必要使用像IPSec这样的下层通信系统。 当我的通讯点位于不同的机器上时,是否需要添加一些额外的安全function?

我希望我解释得很好。

一个使用encryption来实现三个不同的目标,保密性,完整性和不可抵赖性。

服务器证书允许客户端validation远程服务器的身份,因为服务器名称是在证书中编码的。
当客户端接受服务器证书时,build立encryption连接,客户端可以通过发送正确的凭证来识别自己。

  • 机密性 – 客户端和服务器的身份都被validation,都不能被模仿。 由于encryption,通信不能被拦截。
  • 完整性 – 由于encryption传输的数据不能被篡改。
  • 不可抵赖性 – 通常要求客户端使用相互SSL并使用客户端SSL证书进行身份validation,而不是仅使用用户名/密码凭证(仅限于服务器证书)。

我需要每个连接点的证书吗?

几乎。 由于证书是针对主机名发出的,而不是针对该主机上的特定服务发出的,因此您可以为在该主机上运行的多个服务/端点使用相同的证书。

客户端证书通常是客户端独有的,而不是客户端运行的主机,也就是说,如果您在群集上部署应用程序,那么应用程序的所有实例经常会使用相同的客户端证书。 尽pipe您还可以看到集群中的每个节点都有自己唯一的客户端证书,该证书将由该节点上运行的所有应用程序共享,并且该集群应用程序的每个实例都会使用不同的证书来标识自己。

我可以只使用一个并分享吗?

有了上面提到的考虑,是的。

在生产环境中,我是否需要使用由可信CA颁发的证书?

当您完全控制客户端和服务器上的两个证书存储(完全不需要CA)(既不是可信的公共密钥,也不是内部的)时,您可以简单地复制公钥并使用这些validation终点。

否则使用CA颁发的证书比较好。

在testing或开发环境方面呢?

一样。

目前我所有的连接点(jee容器,存储系统)都运行在同一台机器上。

为了在这种情况下对通信的机密性和完整性构成威胁,攻击者已经有足够的权限访问服务器来绕过这种传输安全性,并直接访问数据。