Ssl tomcat获取所有信任证书
我有一个带有服务器和客户端证书的小型安全应用程序,它运行在Tomcat7中。每个客户端都有自己的证书 在webapp中,我需要一个包含所有已知可信证书别名的选项卡,因为每个客户端都必须报告所有X分钟。 如果客户端在X分钟后未报告,服务器必须标记此客户端 因此,我的想法是从truststoreFile中获取所有受信任的证书,该文件在Tomcat的Server.xml中定义,因为我必须知道所有已注册的客户机/证书 我的问题是,我没有找到任何api来获取tomcat信任的所有证书Ssl tomcat获取所有信任证书,ssl,tomcat7,truststore,Ssl,Tomcat7,Truststore,我有一个带有服务器和客户端证书的小型安全应用程序,它运行在Tomcat7中。每个客户端都有自己的证书 在webapp中,我需要一个包含所有已知可信证书别名的选项卡,因为每个客户端都必须报告所有X分钟。 如果客户端在X分钟后未报告,服务器必须标记此客户端 因此,我的想法是从truststoreFile中获取所有受信任的证书,该文件在Tomcat的Server.xml中定义,因为我必须知道所有已注册的客户机/证书 我的问题是,我没有找到任何api来获取tomcat信任的所有证书 有人能帮忙吗?首先,
有人能帮忙吗?首先,您确定您的信任库(始终)会包含客户端证书吗?客户端身份验证的“官方”(X.509/PKIX)方式,即客户端证书,是让一个CA(或多个CA)向客户端颁发证书;然后,您的服务器不需要单独信任客户端证书,只需要信任CA。这样的CA可以是公共CA、企业CA,也可以是您(或您的组/部门/任何东西)为您的服务器运行的CA。只有对于自签名的客户端证书,才需要在服务器信任库中单独设置它们 其次,webapp(servlet)代码似乎不可能获得连接器配置,可能是作为一种安全特性,请参阅 但是,如果您确实在信任库文件中拥有所有证书,并且可以找到该文件(通常是JKS),那么:
- 使用
获取正确类型的KeyStore对象(JKS)KeyStore.getInstance(String)
- 为该文件创建一个
,并将其馈送到FileInputStream
(然后关闭它;try resource可以为您执行此操作)。如果您不知道密码,请使用ks.load
,您仍然可以访问证书(但不能访问私钥,并且仅限于JKS)null
- 使用
获取存储中所有条目的列表.alias()
- 如果此文件中同时存在trustedcerts和PrivateKey(即,它不仅仅是一个信任库文件),请使用
检查每个别名。isCertificateEntry(别名)
- 您现在有了别名,即您(或某人)将每个证书导入信任库时指定的名称,但不一定与证书中客户端的实际名称相同
- 如果需要每个证书中的名称字段,请调用
,强制转换为.getCertificateEntry(别名)
,然后调用X509Certificate
,然后调用.getSubjectX500Principal()
或其中一个.toString()
重载并根据需要分析或检查结果.getName()
.getCertificateAlias(Certificate)
查找叶证书,即链[0]
。跟踪每个别名上次请求的时间,您可以识别任何“丢失”的别名
密钥库的Javadoc位于