我想限制SSL访问使用证书的Tomcat实例,而不是依赖任何“用户”帐户。
我有一个用于签署证书的CA,但是如果我configurationTomcat来信任CA,那么它将信任任何由它签名的人 ,而我想限制得多,只允许我已经批准的证书特定的用法(即,我在该服务器上运行的应用程序)。
在我看来,这正是X.509的扩展密钥用法的一部分,我可以创build具有定义为自定义值的字段的证书,但我无法弄清楚是否有任何方法使Tomcat注意该领域,只允许某些用途。 有谁知道如何做到这一点? 即使是Apache httpd的指针也是有用的,因为我可以把Tomcat置于https前端。
这不能在带有extendedKeyUsage的tomcat中的SSL层完成。 mod_ssl(来自APR)只允许你使用SSLRequire来做到这一点,但是由于在服务器范围内无效,它将被忽略。 我不认为非APR实施支持这一点,因为我没有看到它的证据。
充其量,你可以在servlet中自己查看证书(假设它暴露给你;我不知道该怎么做),然后检查那里的扩展名。
但是,你所要做的并不是典型的。 通常的做法是创build自己的信任根(不要信任浏览器的信任根或任何东西),并使用它来颁发客户端证书。 他们需要成为一个客户端证书(使用clientAuth,如果是V3,适当的EKU),但没有别的必须特别。 您可以依靠DN来识别用户。
Apache特定的东西,因为我比使用直接使用tomcat更加舒适,
Cert的使用情况并未公开在Apache默认提供的SSL环境variables列表中 。 但看起来你可以像这样使用一个自定义的SSLRequire :
SSLRequire "certUsageSSLClient" in PeerExtList("SECCertUsages")
我相信这些名字是正确的,但是如果短名不完全符合你的ssl实现的要求,你可能需要深入研究这些OID。
http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn3.html