当前位置:  开发笔记 > 编程语言 > 正文

CLIENT-CERT auth方法可以与tomcat中的JDBC领域一起使用吗?

如何解决《CLIENT-CERTauth方法可以与tomcat中的JDBC领域一起使用吗?》经验,为你挑选了1个好方法。

JDBC领域指定用于身份验证的表结构,其中包含属性userNameCol和userCredCol定义的列.这些对应于用户和密码,这对FORM或BASIC auth方法有意义.它们是交互式的,需要来自客户端用户的这两个部分.

从证书中回来的是什么?

userNameCol和userCredCol中存储的数据示例是什么样的?

在这种情况下,领域是否有替代表结构?

PS - 我正在使用tomcat 5.5.x.



1> erickson..:

JDBCRealm支持CLIENT-CERT

是的,它可以.但是,有一些怪癖需要注意.

用户名

用户名列应包含证书主题的可分辨名称,作为字符串.不幸的是,Tomcat用于获取此字符串的方法会产生依赖于实现的结果,因此如果您切换到新的安全提供程序甚至只是升级Java运行时,您可能需要将用户名映射到新表单.您必须测试部署以找出使用的格式.

具体来说,getName()Principal返回者上调用X509Certificate.getSubjectDN()获取a String,用作用户名.如果您阅读文档,您会发现这不再是最好的方法.

认证

最简单的设置是将信任锚加载到Tomcat的信任存储中,该信任存储在"server.xml"文件中配置.通过此设置,任何一个受信任的CA中的根目录的客户端证书链都将被视为"已通过身份验证",并且正确的身份验证意味着身份已知,并且与授权不同,授权确定允许该身份的身份.做.

授权

由于任何具有签名证书的人都将通过身份验证,因此您需要设置角色以保护应用程序中的私有资源.这是通过在"web.xml"文件中设置与角色关联的安全性约束来完成的.然后,在您的数据库中,填充"roles"表以向可信用户授予额外角色.

用户表和角色表之间的关系与基于FORM的授权完全相同,应该用于向您信任的用户授予适当的权限.

关于密码的注释

JDBCRealm将创建一个新的Principal,它确实带有密码,但是除非你的应用程序将这个属性转发Principal给特定于Tomcat的实现(GenericPrincipal),否则这个属性对你来说是不可见的,并且你输入的内容并不重要那一栏.我推荐NULL.

换句话说,当使用JDBCRealmclient-auth时,将忽略密码字段.这GenericPrincipal有一种访问底层主体的方法,但不幸的Principal是,证书中没有传递; 在JDBCRealm将它设置为null; 在这种情况下唯一有用的方法可能是getName()(返回主题DN是一些可能非标准的形式).

表结构和内容

使用与基于FORM的JDBCRealm(或DatasourceRealm)完全相同的表结构.唯一的区别在于内容.用户名将是主题专有名称的文本表示,密码将是NULL或某些虚拟值.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有