Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl tomcat获取所有信任证书_Ssl_Tomcat7_Truststore - Fatal编程技术网

Ssl tomcat获取所有信任证书

Ssl tomcat获取所有信任证书,ssl,tomcat7,truststore,Ssl,Tomcat7,Truststore,我有一个带有服务器和客户端证书的小型安全应用程序,它运行在Tomcat7中。每个客户端都有自己的证书 在webapp中,我需要一个包含所有已知可信证书别名的选项卡,因为每个客户端都必须报告所有X分钟。 如果客户端在X分钟后未报告,服务器必须标记此客户端 因此,我的想法是从truststoreFile中获取所有受信任的证书,该文件在Tomcat的Server.xml中定义,因为我必须知道所有已注册的客户机/证书 我的问题是,我没有找到任何api来获取tomcat信任的所有证书 有人能帮忙吗?首先,

我有一个带有服务器和客户端证书的小型安全应用程序,它运行在Tomcat7中。每个客户端都有自己的证书

在webapp中,我需要一个包含所有已知可信证书别名的选项卡,因为每个客户端都必须报告所有X分钟。 如果客户端在X分钟后未报告,服务器必须标记此客户端

因此,我的想法是从truststoreFile中获取所有受信任的证书,该文件在Tomcat的Server.xml中定义,因为我必须知道所有已注册的客户机/证书

我的问题是,我没有找到任何api来获取tomcat信任的所有证书


有人能帮忙吗?

首先,您确定您的信任库(始终)会包含客户端证书吗?客户端身份验证的“官方”(X.509/PKIX)方式,即客户端证书,是让一个CA(或多个CA)向客户端颁发证书;然后,您的服务器不需要单独信任客户端证书,只需要信任CA。这样的CA可以是公共CA、企业CA,也可以是您(或您的组/部门/任何东西)为您的服务器运行的CA。只有对于自签名的客户端证书,才需要在服务器信任库中单独设置它们

其次,webapp(servlet)代码似乎不可能获得连接器配置,可能是作为一种安全特性,请参阅

但是,如果您确实在信任库文件中拥有所有证书,并且可以找到该文件(通常是JKS),那么:

  • 使用
    KeyStore.getInstance(String)
    获取正确类型的KeyStore对象(JKS)

  • 为该文件创建一个
    FileInputStream
    ,并将其馈送到
    ks.load
    (然后关闭它;try resource可以为您执行此操作)。如果您不知道密码,请使用
    null
    ,您仍然可以访问证书(但不能访问私钥,并且仅限于JKS)

  • 使用
    .alias()
    获取存储中所有条目的列表

  • 如果此文件中同时存在trustedcerts和PrivateKey(即,它不仅仅是一个信任库文件),请使用
    检查每个别名。isCertificateEntry(别名)

  • 您现在有了别名,即您(或某人)将每个证书导入信任库时指定的名称,但不一定与证书中客户端的实际名称相同

  • 如果需要每个证书中的名称字段,请调用
    .getCertificateEntry(别名)
    ,强制转换为
    X509Certificate
    ,然后调用
    .getSubjectX500Principal()
    ,然后调用
    .toString()
    或其中一个
    .getName()
    重载并根据需要分析或检查结果

最后,由于您希望通过别名跟踪使用每个证书的请求,因此对于每个请求,请获取中使用的证书,然后使用
.getCertificateAlias(Certificate)
查找叶证书,即
链[0]
。跟踪每个别名上次请求的时间,您可以识别任何“丢失”的别名

密钥库的Javadoc位于