gpt4 book ai didi

java - Glassfish 2.1 CLIENT-CERT 如何获取 Principal

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:10 24 4
gpt4 key购买 nike

我有一个要与客户端证书一起使用的 Web 应用程序。我在我的 web.xml 中设置了以下内容,我可以通过 https 访问我的应用程序。

<security-constraint>
<web-resource-collection>
<web-resource-name>securedapp</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>DELETE</http-method>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>PUT</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

<login-config>
<auth-method>CLIENT-CERT</auth-method>
</login-config>

握手工作正常。我只是将证书用作非常重要的安全措施。我只是想知道所提供证书的主体,不需要登录。但是,当我尝试从 session 中获取主体时,它是空的。

我也试过

X509Certificate[] certs = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate");

但这也是空的。有谁知道如何从我的证书中获取主体?

非常感谢小吃

最佳答案

您确定 Glasfish 确实请求了客户端证书吗?

我尝试对 Tomcat 做同样的事情,但我发现,如果您在 security-constraint 中放置了 auth-constraint,Tomcat 只会请求客户端证书,例如这个:

<security-constraint>
...
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
...
</security-constraint>

没有auth-constraint Tomcat 不需要登录用户,因此不需要请求客户端证书。 transport-guarantee 仅强制使用 HTTPS。

但即便如此,我也必须将证书的用户添加到容器的角色管理中并为用户分配角色,否则用户将无法访问该 URL 并获得 HTTP 401 响应。因此,如果您只想要一个客户端证书而不将其与容器中的用户相关联,那么它是行不通的。

在 Tomcat 中,当 role-name* 时,您可以配置一个领域来接受没有角色的用户,但您仍然必须将用户添加到身份验证领域,如果您想接受所有受信任的证书并自行检查证书主体,这将无济于事。也许 Glassish 可以做到这一点。

关于java - Glassfish 2.1 CLIENT-CERT 如何获取 Principal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8165012/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com