大多数 JEE 容器、存储后端系统……都提供了使用 SSL 的方式来获得安全通信。
为了实现这一点,我还不太清楚一些问题:
- 每个连接点都需要一个证书吗?我可以只使用一个并共享吗?
- 在生产环境中,我需要这些由 CA 根颁发的证书吗?在测试或开发环境中呢?
- 目前我的所有连接点(jee 容器、存储系统)都在同一台机器上运行。因此,我认为没有必要使用像 IPSec 这样的底层通信系统。当我的通信点位于不同的机器上时,我是否需要添加一些额外的安全功能?
我希望我已经解释得很好了。
答案1
使用加密来实现三个不同的目标:机密性、完整性和不可否认性。
服务器证书允许客户端验证远程服务器的身份,因为服务器名称已编码在证书中。
当客户端接受服务器证书时,将建立加密连接,客户端可以通过发送正确的凭据来识别自己。
- 保密性 - 客户端和服务器的身份都经过验证,任何一方都无法被冒充。由于加密,通信无法被拦截。
- 完整性——由于加密,传输的数据不能被篡改。
- 不可否认性- 通常要求客户端使用相互 SSL 并使用客户端 SSL 证书进行身份验证,而不是(或除了)使用仅带有服务器证书的用户名/密码凭据。
每个连接点都需要一份证书吗?
差不多。由于证书是针对主机名而不是该主机上的特定服务颁发的,因此您可以将同一份证书用于该主机上运行的多个服务/端点。
客户端证书通常是客户端独有的,而不是客户端运行的主机独有的,即,如果您在群集上部署应用程序,则该应用程序的所有实例通常都会使用相同的客户端证书。尽管您还会看到群集中的每个节点都有自己独有的客户端证书,该证书将由该节点上运行的所有应用程序共享,并且该群集应用程序的每个实例都将使用不同的证书来标识自己。
我可以只使用一个并与他人分享吗?
考虑到上述因素,是的。
在生产环境中,我是否需要使用由受信任的 CA 颁发的证书?
当您完全控制客户端和服务器(上的证书存储)时,您根本不需要 CA(无论是受信任的公共 CA 还是内部 CA),您可以简单地复制公钥并使用这些公钥来验证端点。
否则最好使用 CA 颁发的证书。
在测试或开发环境中怎么样?
相同。
目前我所有的连接点(jee容器、存储系统)都在同一台机器上运行。
在这种情况下,为了对您的通信的机密性和完整性构成威胁,攻击者已经拥有对服务器的足够访问权限,可以绕过这种传输安全性,并直接访问数据……