我有一个场景,其中我几乎没有其他 web 服务,其中很少需要强制执行相互 ssl,很少应该只有一种方式 ssl,这里是相同的 web 应用程序。
在基于 tomcat/Spring 的应用程序中这可能吗?
最佳答案
抱歉回复晚了,是的,我这样做了,不确定是否是最好的方法,但有点乱。
第 1 步:在您的 tomcat 中使用 clientAuth=want 设置 SSL 的一种方式。 这将解决您的场景,您希望所有 web 服务的一种方式 ssl 接受需要额外/相互身份验证的方式。
第 2 步:现在是需要相互 ssl 的 Web 服务。 编写一个 servlet 过滤器,并针对特定的 Web 服务 url 检查传入的 http 证书请求。遍历在请求中找到的证书并将其与来自您的信任库的证书进行匹配。如果找到匹配项,则继续请求流程,如果没有找到匹配项,则返回异常,因为未找到 SSL 证书。
X509Certificate[] certificates = (X509Certificate[]) request
.getAttribute("javax.servlet.request.X509Certificate");
以上代码将在您的请求中为您提供一系列证书。
注意:确保您的 SSL 配置正确,否则证书变量保持为空。
关于java - 是否有可能根据 URL 同时为同一个 Web 应用程序使用一种方式和相互 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33153288/