我目前正在为我的java应用程序中的所有向外HTTPS通信强制SSL信任,包括在强化模式下禁止自签名证书。
然而,我想知道SSL信任是如何以及是否始终可靠的。你能帮我理解以下关于Java中信任库的详细信息吗?SSL信任完全取决于我们的信任存储的内容(我们建立信任的信任锚点(
- 默认的java证书存储是否会自动更新,即如果出现新的CA(除非安装了java升级包(
- 信任存储中的受信任根CA信息是否需要不断更新以维护SSL安全
- 只有在更新JRE时才会更新Java信任存储。如果你想添加新的CA证书,你需要自己添加。根据我的经验,如果您保持JRE是最新的,那么对于公共CA来说这是不必要的
- 不,您不需要更新信息。在最坏的情况下,信任存储中的证书太旧,无法连接到服务器,这不是安全问题
-
据我所知,默认的java cacert文件仅通过包更新/升级来更新。
-
需要不断更新,因为CA根证书过期或被吊销,必须从cacertfile中删除。另一方面,将颁发新的CA根证书,并且必须包含这些证书。但此更新依赖于1。
深入挖掘:
如果你在服务器端设置HTTPS,那么:
您需要一个私钥和一个由任何官方认证机构签署的证书,如Entrust、Baltimore CyperTrust(或创建一个自签名证书(。您必须设置一个包含私钥和签名证书的java密钥库。证书本身的有效期有限,必须在到期前续订,这必须由您监控。在续订时,CA会注意始终使用CA根证书,该证书与续订的证书一样有效。
连接到您的服务器的客户端在SSL握手时接收您的服务器证书,并根据其信任库对其进行验证,在默认配置的情况下,java位于jre-x.y.z/lib/security/cacerts中。此文件在每次java更新时都会更新,您可以根据其实际情况进行验证。
如果您另外使用基于证书的客户端身份验证,则由您来保持所需的客户端证书的最新状态。通常情况下,你的伴侣会在证书到期前向你发送一份他们的证书副本。
或者,您可以只实现客户端的CA根证书。在这种情况下,您就不需要花那么多精力来保持信任库的最新状态。回溯是指客户验证的机会较少。
如果你在客户端比:
默认配置中的客户端根据Java附带的cacert文件验证服务器证书。
除了默认配置(以防您只信任某个特定的服务器(之外,您还负责设置信任库并使其保持最新。这个信任库相当于上面描述的客户端身份验证,但包含服务器的内容。
至少,如果您需要客户端身份验证,您必须设置一个客户端密钥库,该密钥库等效于上面解释的服务器密钥库,但保留客户端的内容。