我有一个现有证书(c1),包括私钥,未标记为ca,并受内部根ca(c0)的信任。我想使用它来:
客户端:
生成新的密钥对(c2)
使用c1对密钥对进行签名,使其具有验证路径c2<c1<c0
使用c2执行ssl客户端身份验证
服务器端:
接受ssl客户端证书
验证链,无论c1不是ca
到目前为止,我已经找到了一些关于如何使用通用密钥对新密钥进行签名的文章:在没有bouncycastle的java中创建x509证书?
然而:
产生的c2不受信任,因此在协商时不被接受=>我们可能必须在apache端禁用客户端证书验证,并在java端执行它
上面的文章暗示了如何使用私有的sun jdk方法:关于如何使用标准jdk 11 classed或bouncycastle来实现这一点,有什么提示吗?
1条答案
按热度按时间piwo6bdm1#
正如spider Boris在评论中指出的,如果不满足以下任何条件,则不允许证书签署其他证书:
通过基本约束证书扩展,证书主体必须是ca。请参阅我的博客文章,了解基本约束在实践中是如何工作的,以及证书链接引擎如何对违规行为作出React。
证书必须包括
certKeySign
密钥使用证书扩展中的用法验证链,无论c1不是ca
禁用基本约束和密钥使用扩展验证并保留其他验证步骤是很困难的,这可能需要禁用客户端证书验证。这是一种简单的pki误用,它会打开各种漏洞,因为您无法实现正确的证书验证。