繁体   English   中英

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

[英]Can Mutual Certificate based Authentication co-exist with Basic Auth over SSL for different paths within the same application?

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

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

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

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

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

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

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

是的你可以。 有2个解决方案:

1.第一个解决方案

这里的技巧是配置 Apache 要求客户端身份验证,但不需要它。 它在您的 Apache 配置中配置如下:

<VirtualHost mysite:443>

  //usual SSL VHost config

  SSLVerifyClient optional


  RequestHeader set SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
  RequestHeader set SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
  RequestHeader set SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}s"
  RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"

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

</VirtualHost>

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

2.第二种解决方案

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM