首页 文章

每个webapp模块的weblogic客户端证书身份验证

提问于
浏览
1

我正在使用Weblogic 12c .

我想设置客户端证书身份验证(双向SSL) . 但我不想为整个服务器强制执行客户端证书 . 基本上,在我们的webapp中,大多数servlet应该使用常规单向SSL(仅验证服务器证书),而无需客户端提供证书 . 但是对于其中一个servlet,需要客户端证书身份验证 .

我为Glassfish设置了类似的东西,使用servlet的单独模块,其中web.xml部署描述符需要双向SSL,login-config元素表示CLIENT-CERT认证类型 . 我还设置了适当的安全约束,角色和组 .

但是,这似乎不适用于Weblogic . 在SSL下的管理控制台中,我看到“双向客户端证书行为”,其中包含3个可能的值:“未请求客户端证书”,“请求但未强制执行”和“请求并强制执行” .

如果我将其设置为“未请求”,则客户端根本不会提供任何证书(即使我与使用Glassfish的CLIENT-CERT具有相同的web.xml) . 设置为“请求并强制执行”不是一种选择 . 我也试过设置为“请求但不强制执行”,但这也很糟糕,因为浏览器会询问客户端证书,即使对于那些不需要它的页面(大多数),我们也不想要这种行为 .

基本上,在我看来,Weblogic希望为整个服务器强制执行双向SSL,但这不是我们需要的,我们只需要一个webapp模块 . 有可能这样做吗?

编辑:为了澄清,我设置了DefaultIdentityAsserter并创建了自定义UserNameMapper以将客户端证书映射到用户名 . 但问题是,如果SSL设置(如上所述)设置为“未请求”,则根本不会显示客户端证书,因此服务器无法进行身份验证,我得到401响应 . 我无法使用其他2个SSL设置,因为服务器将要求所有网页的客户端证书,这不是我们想要的 .

2 回答

  • 1

    您可以创建2个网络 Channels . 请参阅WLST中的NetworkAccessPointMBean或管理控制台中的Environment / Servers / yourServer / Protocols / Channels .

    • 通道1:在特定端口上启用了具有单向SSL的SSL

    • 通道2:SSL在特定端口上启用了双向SSL和客户端证书

    然后,根据您的客户端证书要求,在相应的端口上访问您的Web模块 .

    这只需要一台服务器 .

  • 3

    为了您的特定需求,我将创建2个托管服务器,仅设置一个使用双向SSL . 然后,您可以在适当的受管服务器上部署应用程序,具体取决于您是否需要2路SSL .

    然后,您需要在WebLogic服务器前添加反向代理,以便将用户转发到正确的端口,因为您可能不希望公开多个端口 .

相关问题