Tomcat里配置CRL
来源:互联网 发布:淘宝平邮无需物流 编辑:程序博客网 时间:2024/05/17 09:23
本文介绍在Tomcat中配置HTTPS双向认证(验证客户端)的情况下,如何验证CRL。
我们可以按照文章《如何用Tomcat和Openssl构建HTTPS双向认证环境(HTTPS客户端认证)》(http://blog.csdn.net/jianxia007/article/details/24806929)里的方法在Tomcat里构建一个HTTPS验证客户端证书(Usbkey或文件数字证书)的环境。但是这样配置后,Tomcat只会根据CA的证书来验证客户端证书是否合法(是否是CA签过名的),但是没有检查该客户端证书是否已经被吊销。所以必须进一步检查CRL(Certification Revocation List)即证书吊销列表。
所以我建议我们还是通过java.security.cert.X509CRL这个Java类库自带的类来由应用程序自己判断。而且这个工作也非常简单:
(1)获取CRL文件:
(2)在Tomcat的应用里装在CRL:
(3)检查客户端证书是否被吊销:
我们可以按照文章《如何用Tomcat和Openssl构建HTTPS双向认证环境(HTTPS客户端认证)》(http://blog.csdn.net/jianxia007/article/details/24806929)里的方法在Tomcat里构建一个HTTPS验证客户端证书(Usbkey或文件数字证书)的环境。但是这样配置后,Tomcat只会根据CA的证书来验证客户端证书是否合法(是否是CA签过名的),但是没有检查该客户端证书是否已经被吊销。所以必须进一步检查CRL(Certification Revocation List)即证书吊销列表。
CRL它记录了CA吊销的未过期的证书(可能是因为用户的私钥被泄露了等原因)。
Tomcat 5.5.17版本在HTTPS的<Connector>配置里加了一个crlFile选项,来指向一个CRL文件。
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"maxThreads="150" scheme="https" secure="true"clientAuth="true" sslProtocol="TLS"keystoreFile="conf/tomcat.jks" keystorePass="123456" keystoreType="JKS"truststoreFile="conf/truststore.jks" truststorePass="123456" truststoreType="JKS"crlFile="conf/testca.crl"/>
但是个人认为这种方式不好,因为若Tomcat在底层帮你完成了CRL的检查,并直接拒绝了客户端(浏览器)的请求,你的应用程序(webapp)并不知道,这样的坏处是:
(1)用户在被拒绝时可能得到一个不友好的错误提示页面(当然和你的页面风格完全不同)。
(2)当然你也无法引导用户进入另一个帮助页面。
(3)应用层无法记录这种非法的访问。
所以我建议我们还是通过java.security.cert.X509CRL这个Java类库自带的类来由应用程序自己判断。而且这个工作也非常简单:
(1)获取CRL文件:
一般CA会在其网站上定时发布CRL文件(标准的X509格式),我们可以定期下载(用HTTP/FTP)到我们的Web服务器。当然这个过程既可以人工完成也可以写一个程序周期去取。
(2)在Tomcat的应用里装在CRL:
你可以定时重读一下CRL文件(或每次下载后出发重读一下CRL文件),装在CRL文件到X509CRL对象方法如下:import java.security.cert.*;
public X509CRL loadX509CRL(String crlFilePath) {
InputStream inStreamInputStream inStream = new FileInputStream(crlFilePath);
CertificateFactory cf
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509CRL crlX509CRL crl = (X509CRL)cf.generateCRL(inStream);
inStream.close();
inStream.close();return crl;
}}
注:简单期间本文不对Exception进行处理。
(3)检查客户端证书是否被吊销:
当HTTPS验证客户端成功后,进入我们的webapp时(servlet/jsp),我们可以从请求中得到用户的证书:java.security.cert.X509Certificate cert = null;
java.security.cert.X509Certificate[] certsjava.security.cert.X509Certificate[] certs = null;
certscerts=(X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");if (certs.length > 0) {
certcert = certs[0];
}}注:可以参考《如何用Tomcat和Openssl构建HTTPS双向认证环境(HTTPS客户端认证)》里的那个显示客户端证书的jsp。
接下来验证证书是否被吊销的方法非常简单,只要把客户证书传入X509CRL的isRevoked函数就行:boolean result = crl.isRevoked(cert);如果返回true,就说明该证书已被吊销,你就可以引导客户端浏览器进入显示错误提示的页面。
测试方法:你可以参考《利用openssl创建一个简单的CA》(http://blog.csdn.net/jianxia007/article/details/24805941)里的方法,自己生成客户端证书,然后吊销证书并生成CRL文件来进行测试。
转自:http://blog.csdn.net/jasonhwang/article/details/2413310
0 0
- Tomcat里配置CRL
- TOMCAT里配置CRL
- Tomcat里配置CRL
- CRL
- tomcat里配置https
- OpenVPN配置启动出错: CRL: cannot read: crl.pem
- GPIO->CRL 端口低配置寄存器
- Tomcat里的tomcat-users.xml配置
- 用于处里PME或DER格式的CRL文件。
- Eclipse里启动Tomcat,配置内存大小
- Eclipse里启动Tomcat,配置内存大小
- Eclipse里启动Tomcat,配置内存大小
- Eclipse里启动Tomcat,配置内存大小
- Eclipse里启动Tomcat,配置内存大小
- Eclipse里启动Tomcat,配置内存大小
- tomcat如何配置到Windows服务里
- tomcat里的server.xml基本配置
- 在Eclipse里配置tomcat图片路径
- 新型网络环境下 网络账户安全比产品创意更重要
- oracle与java的数据类型映射
- 蚂蚁的难题(二)
- poj 1017 Packets
- eclipse搭建SVN
- Tomcat里配置CRL
- 七夕节
- Wireshark抓包
- HttpClient 上传文件
- How to update GitHub forked repository?
- ARM市场部VP:愿成智能与穿戴设备核心
- findViewById()返回 null
- BUSYBOX下的TFTP介绍
- 骰子(nyoj 654 && 632)