根据Tomcat 7中的证书吊销列表验证客户端证书
Tomcat中针对CRL的客户端证书验证的常用方法是什么 一种可能的解决办法: 更新server.xml,设置连接器,设置密钥和信任存储,并且有crlList参数 这种方法有两个问题: 1列表维护-必须在Tomcat之外完成,Tomcat需要重新启动以获取最新的列表 2我找不到或至少找不到一种方法来支持多个CA机构的crl列表,或者只是说——同时支持多个CR列表 几年前,我用Tomcat5找不到好的解决方案。7号有什么消息吗 B是否有通用/优雅的方法覆盖连接器处理程序和当前功能,并提供自定义证书验证根据Tomcat 7中的证书吊销列表验证客户端证书,tomcat,ssl-certificate,certificate-revocation,Tomcat,Ssl Certificate,Certificate Revocation,Tomcat中针对CRL的客户端证书验证的常用方法是什么 一种可能的解决办法: 更新server.xml,设置连接器,设置密钥和信任存储,并且有crlList参数 这种方法有两个问题: 1列表维护-必须在Tomcat之外完成,Tomcat需要重新启动以获取最新的列表 2我找不到或至少找不到一种方法来支持多个CA机构的crl列表,或者只是说——同时支持多个CR列表 几年前,我用Tomcat5找不到好的解决方案。7号有什么消息吗 B是否有通用/优雅的方法覆盖连接器处理程序和当前功能,并提供自定义证书
JBossAS允许您这样做,只需扩展现有类,并允许您定义自己的登录模块和验证器。您可以通过实现自己的TrustManager来实现这一点。请参阅HTTP connector文档中的trustManagerClassName属性,现在可以在不重新启动服务器的情况下选择最新的CRL文件 他们介绍了两种方法,名为: ReloadsLHOSTConfigString主机名-重新加载特定主机 reloadslhostconfigs-全部重新加载 它们可以用多种方式调用: 使用jmx 使用管理器服务 通过定制协议——我在研究中发现了这种方法 道路1和道路2的详细信息可在网上轻松获取 有关如何使用方式3的详细信息: 创建一个扩展您选择的协议的类,例如Http11NioProtocol 重写所需的方法并在其中调用super以保持默认行为 在此类中创建一个线程,以不时调用ReloadsLHostConfigs方法 将这个类打包到一个jar中,并将这个jar放在tomcat的lib文件夹中 在server.xml中的连接器中编辑协议以使用此自定义定义的协议 请在下面查找示例代码: 主要协议类别:
package com.myown.connector;
import java.io.File;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.net.URL;
import java.net.URLConnection;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentMap;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.net.ssl.SSLSessionContext;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.modeler.Registry;
import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.AbstractJsseEndpoint;
import org.apache.tomcat.util.net.GetSslConfig;
import org.apache.tomcat.util.net.SSLContext;
import org.apache.tomcat.util.net.SSLHostConfig;
import org.apache.tomcat.util.net.SSLHostConfigCertificate;
import org.apache.tomcat.util.net.SSLImplementation;
import org.apache.tomcat.util.net.SSLUtil;
public class ReloadProtocol extends Http11NioProtocol {
private static final Log log = LogFactory.getLog(Http12ProtocolSSL.class);
public ReloadProtocol() {
super();
RefreshSslConfigThread refresher = new
RefreshSslConfigThread(this.getEndpoint(), this);
refresher.start();
}
@Override
public void setKeystorePass(String s) {
super.setKeystorePass(s);
}
@Override
public void setKeyPass(String s) {
super.setKeyPass(s);
}
@Override
public void setTruststorePass(String p) {
super.setTruststorePass(p);
}
class RefreshSslConfigThread extends Thread {
AbstractJsseEndpoint<?> abstractJsseEndpoint = null;
Http11NioProtocol protocol = null;
public RefreshSslConfigThread(AbstractJsseEndpoint<?> abstractJsseEndpoint, Http11NioProtocol protocol) {
this.abstractJsseEndpoint = abstractJsseEndpoint;
this.protocol = protocol;
}
public void run() {
int timeBetweenRefreshesInt = 1000000; // time in milli-seconds
while (true) {
try {
abstractJsseEndpoint.reloadSslHostConfigs();
System.out.println("Config Updated");
} catch (Exception e) {
System.out.println("Problem while reloading.");
}
try {
Thread.sleep(timeBetweenRefreshesInt);
} catch (InterruptedException e) {
System.out.println("Error while sleeping");
}
}
}
}
}
server.xml中的连接器应将其称为协议:
<Connector protocol="com.myown.connector.ReloadProtocol"
..........
希望这有帮助 好的,谢谢。这是一条路要走。很久以前我就已经在JBoss上做过类似的事情,但是如果有现成的解决方案,或者至少是标准的方法,我会更高兴。tomcat服务器在默认情况下从CA下载一次CRL列表后,是否会在本地缓存或存储一段时间?我们需要为实现CRL缓存配置更多吗?只是晚了5年。。。谢谢你的回答,我会接受这个,因为我不希望有任何新的弹出窗口,尽管我目前无法测试它