繁体   English   中英

SSL - 仅允许特定客户端或服务器(Java信任库)

[英]SSL - only allow specific clients or servers (Java truststore)

如果信任存储区应仅包含根CA证书(这似乎是我从我所阅读的内容中推荐的),那么如何限制对特定方的访问(而不是信任存储区中CA验证的任何一方)。

有关详细信息:

我有两个java应用程序 - 让我们称之为A和B - 使用SSL来保护通信。 A和B都有一个客户端和服务器部分来发送(客户端)和接收(服务器)消息。 客户端使用存储在client.keystore中的密钥,服务器使用server.keystore中的密钥,并且都使用单个信任存储来验证其他应用程序的身份(即,应用程序A有3个密钥库,应用程序B有3个密钥库) 。

到目前为止,我已经使用keytools为客户端和服务器生成密钥,对它们进行签名(使用我自己的测试CA),并将签名的证书加载回密钥库。 我为app A和B执行此操作。为了完成SSL握手,我发现truststores需要包含用于签署其他apps密钥的CA证书(因此app A的truststore必须包含CA证书)用于签署应用B的客户端和服务器密钥,反之亦然)。

到目前为止,这是有道理的,但由于信任存储包含根CA证书,我可以生成另一组密钥,使用相同的CA签名,并让其他应用程序接受它们 - 换句话说,应用B将接受流氓只要具有由根CA签名的密钥,代理就像app A一样出现。

SSL有没有防止这种情况的机制? 我已经尝试将app A的客户端和服务器的公钥导入app B的信任存储区(反之亦然),但没有root证书,SSL握手将无法完成。

SSL有没有防止这种情况的机制?

不,SSL提供隐私,完整性和身份验证。 同龄人是他们所说的人。 你所谈论的是授权:这个同伴是我想与之交谈的同伴吗? 这是一项应用责任。 您可以通过SSLSocket.getSession()获取对等证书链,并在握手期间通过HandshakeCompletedListener检查它以授权对等方。 如果您不喜欢他,请关闭插座。 连接上不会发生任何其他事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM