gpt4 book ai didi

ssl - tomcat获取所有信任证书

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:27 27 4
gpt4 key购买 nike

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

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

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

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

有人可以帮忙吗?

最佳答案

首先,您确定您的信任库将(始终)包含客户端证书吗?客户端身份验证的“官方”(X.509/PKIX) 方式即客户端证书是让一个 CA(或多个 CA)向客户端颁发证书;那么您的服务器不需要单独信任客户端证书,只需信任 CA。这样的 CA 可以是公共(public) CA、企业 CA 或您(或您的团队/部门/其他)仅为您的服务器运行的 CA。只有自签名的客户端证书才有必要将它们单独存放在服务器信任库中。

其次,webapp (servlet) 代码似乎不可能获取连接器配置,这可能是一项安全功能,请参阅 Accessing SSL Private Key From a Servlet .

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

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

  • 为文件创建一个 FileInputStream,并将其提供给 ks.load(然后关闭它;try-resource 可以为您完成此操作)。如果您不知道密码,请使用 null 并且您仍然可以访问证书(但不是私钥,并且仅适用于 JKS)

  • 使用 .aliases() 获取商店中所有条目的列表

  • 如果此文件中可以同时存在受信任的证书和私钥(即它不只是一个信任库文件),请使用 .isCertificateEntry(alias) 检查每个别名>

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

  • 如果您想要每个证书中的(任何)名称字段,调用.getCertificateEntry(alias),转换为X509Certificate ,并调用 .getSubjectX500Principal() 然后调用 .toString().getName() 重载之一并解析或检查想要的结果

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

KeyStore 的 Javadoc 位于 http://docs.oracle.com/javase/8/docs/api/java/security/KeyStore.html

关于ssl - tomcat获取所有信任证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31358735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com