基于相互证书的身份验证能否与基于 SSL 的基本身份验证共存,用于同一应用程序中的不同路径?

Posted

技术标签:

【中文标题】基于相互证书的身份验证能否与基于 SSL 的基本身份验证共存,用于同一应用程序中的不同路径?【英文标题】:Can Mutual Certificate based Authentication co-exist with Basic Auth over SSL for different paths within the same application? 【发布时间】:2011-09-27 19:43:29 【问题描述】:

我有一个场景,我们正在开发一个具有企业对客户界面和企业对企业界面的应用程序。

B2B 接口是一个 RESTful 接口,用于修改 B2C 接口通过一堆友好友好的接口操作的资源。

由于 B2B 接口允许访问比 B2C 接口更多的功能,因此要求 B2B 接口使用相互证书身份验证。

我们的目标环境/堆栈是 Apache => Tomcat => Grails => 不相关的基础设施

我目前的研究表明 Apache 将进行身份验证,然后将身份验证详细信息传递给 Tomcat?是这样吗?我一直在研究 spring-security-plugin,它似乎提供了我们想要的东西,我相信我们可以自己提供任何一个选项。

我还没有看到任何关于配置多种不同身份验证机制的讨论。

注意:我不在后备身份验证之后。如果您无法通过相互证书身份验证访问 B2B,则不应选择使用基本身份验证

【问题讨论】:

【参考方案1】:

是的,你可以。有两种解决方案:

1.第一个解决方案

这里的诀窍是配置 Apache 以请求客户端身份验证,但不要求它。它在您的 Apache 配置中是这样配置的:

<VirtualHost mysite:443>

  //usual SSL VHost config

  SSLVerifyClient optional


  RequestHeader set SSL_CLIENT_S_DN "%SSL_CLIENT_S_DNs"
  RequestHeader set SSL_CLIENT_I_DN "%SSL_CLIENT_I_DNs"
  RequestHeader set SSL_SERVER_S_DN_OU "%SSL_SERVER_S_DN_OUs"
  RequestHeader set SSL_CLIENT_VERIFY "%SSL_CLIENT_VERIFYs"

  ProxyPass          http://localhost:50161/path_to_protect
  ProxyPassReverse   http://localhost:50161/path_to_protect

</VirtualHost>

在应用程序级别,您必须检查敏感路径,Apache 通过检查标头提供证书。或者,您也可以在 Apache 级别(通过标签)执行此访问控制。 对于非敏感路径,您可以将应用程序配置为要求输入登录名/密码。

2。第二种解决方案

您可以在 Apache 中声明两个 VirtualHost:一个配置了 SSLVerifyClient 要求 并允许访问您的敏感路径,一个配置了 SSLVerifyClient optional 并且只允许访问您的非敏感路径。

【讨论】:

以上是关于基于相互证书的身份验证能否与基于 SSL 的基本身份验证共存,用于同一应用程序中的不同路径?的主要内容,如果未能解决你的问题,请参考以下文章

JBoss 相互证书身份验证在 SSL 握手时失败

SSL安全证书的实现机制

OpenSSL 客户端基于证书的身份验证失败

基于 Azure AD 证书的身份验证:如何在 Node JS 中指定证书路径?

相互证书身份验证失败并出现错误 403.16

相互 SSL - 多少身份验证就足够了?