2014-09-26 129 views
1

我使用Weblogic 12c。每个webapp模块的weblogic客户端证书认证

我想设置客户端证书身份验证(双向SSL)。但我不想强制整个服务器的客户端证书。基本上,在我们的web应用程序中,大多数servlet应该使用常规的单向SSL(只验证服务器证书),而不需要客户端提供证书。但是对于其中一个servlet客户端来说,需要进行证书认证。

我已经使用单独的模块,其用于在需要2路SSL与web.xml部署描述符与表示login-config元素CLIENT-CERT认证类型servlet的设置类似的事情为Glassfish的。我还设置了适当的安全约束,角色和组。

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

如果我将其设置为“不要求”,客户端完全不存在任何证书(即使我有CLIENT-CERT同一个web.xml与Glassfish的工作)。设置为“请求并强制执行”不是一种选择。我也尝试设置为“请求但不强制”,但这也是不好的,因为浏览器会要求客户端证书,即使是那些不需要它们的页面(大多数),我们也不想要这样的行为。

基本上,在我看来,Weblogic的要强制执行的2路SSL整个服务器,但是这不是我们需要的,我们需要它只是一个web应用模块。是否有可能这样做?

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

回答

3

您可以创建2个网络频道。请参阅WLST中的NetworkAccessPointMBean或管理控制台中的环境/服务器/ yourServer /协议/通道。

  • 通道1:启用SSL瓦特/单向SSL,一个特定的端口
  • 通道2上:启用了SSL瓦特/双向SSL和客户端证书执行,在特定端口上

然后,根据您的客户端证书要求,在适当的端口上访问您的Web模块。

这只需要一台服务器。

+0

感谢您的解释。是的,这似乎比使用两台服务器更好。 – 2014-10-14 22:36:32

1

针对您的特殊需要,我会创造2台托管服务器,建立只有一个2路SSL。 然后,您可以将您的应用程序部署到适当的受管服务器上,具体取决于您是否需要2路SSL。

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

+0

感谢您的回答。是的,这将工作,但我希望只用一台服务器就可以完成。据我所知,在web中有login-config元素。xml(使用CLIENT-CERT)将在每个应用程序的基础上(或每个应用程序模块)启用客户端证书。我想这是通过ssl重新协商完成的。不知道为什么它不与weblogic(我试图speicfy -Dweblogic.security.ssl.enable.renegotiation = true选项,但它没有任何影响)。 – 2014-09-30 02:38:35

+0

如果从Web应用程序的web.xml中删除不需要任何身份验证的安全限制,会发生什么情况?我相信你可以在一台配置为双向SSL的服务器上部署一个没有安全限制的应用程序......但是不确定,我们放弃了客户端证书,太复杂了,你可以看到:/ – foch 2014-09-30 14:04:21

+0

其实我们的部分不需要客户端证书的应用程序在其web.xml中没有安全限制。但是,如果我在服务器级别指定双向SSL(通过指定“请求和强制”),是不是会阻止所有内容,因为它会在客户端没有SSL时询问客户端?我当然可以尝试。 – 2014-10-01 02:47:44