只接受某些证书

时间:2014-06-07 16:23:14

标签: java ssl truststore

我创建了自己的CA,并且我希望使用其证书与使用SSLSockets的服务器进行通信。我可以使用我目前正在使用的信任库来实现这一点,但我希望限制性更强,以便我的服务器只接受来自我明确决定的客户端的连接,这些连接必须拥有我的CA签署的证书(现在,任何人都有我的CA签署的证书被授予访问权限。这背后的目标是通过从服务器的信任库中删除一些证书来撤销证书。

想象一下,我的CA有两个设备,A和B,都有签名证书。我只想授予对A的访问权限,而不是B.如果我只拥有服务器的信任库A证书,我会得到两个客户端的BadCertificate异常;当我添加我的CA的pem文件时,A和B都被授予访问权限,无论是否将A或B的证书明确添加到信任库。

这种方法的任何想法或替代方案?感谢。

1 个答案:

答案 0 :(得分:2)

PKI基础结构的撤销部分(例如,如果您拥有自己的CA,则获得的部分)通常使用CRL(证书吊销列表)或OCSP(在线证书状态协议)完成。

如果对于只有少数客户端的小型PKI来说这太费力了,您还可以将接受的证书(白名单)或被撤销的证书(黑名单)的指纹硬编码到您的应用程序中,并检查每个连接是否你得到的证书与指纹相符。当然,您需要在每次撤销(黑名单)或每当您颁发新证书(白名单)时更新应用程序,因此这不能很好地扩展。但是,CRL需要分发给每个客户端时会出现同样的问题。

OCSP扩展得更好,因为客户端尝试在连接上检索撤销状态,但是您需要设置OCSP响应器。