You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过NettyServerBuilder配置CRL列表?grpc-netty 1.44.1版本

gRPC Netty 1.44.1 配置CRL列表方法

在grpc-netty 1.44.1中,NettyServerBuilder本身没有直接暴露CRL配置入口,但可以通过自定义Netty SslContext的方式实现——因为Netty的SslContextBuilder提供了CRL相关配置能力,再将构建好的SslContext传给NettyServerBuilder即可。以下是具体步骤和代码示例:

方法一:直接通过SslContextBuilder添加CRL列表

这种方式最简单,利用Netty内置的CRL校验逻辑:

  1. 加载CRL文件
    从本地文件或输入流加载X.509格式的CRL:

    import java.io.FileInputStream;
    import java.security.cert.CertificateFactory;
    import java.security.cert.CRL;
    import java.util.Collection;
    
    CertificateFactory crlFactory = CertificateFactory.getInstance("X.509");
    Collection<? extends CRL> crlList = crlFactory.generateCRLs(new FileInputStream("/path/to/your/revocation.crl"));
    
  2. 构建包含CRL的SslContext
    同时配置服务端密钥、信任证书和CRL列表:

    import io.netty.handler.ssl.SslContext;
    import io.netty.handler.ssl.SslContextBuilder;
    import java.io.File;
    
    SslContext sslContext = SslContextBuilder.forServer(
            new File("/path/to/server.crt"),  // 服务端证书
            new File("/path/to/server.key")   // 服务端私钥
        )
        .trustManager(new File("/path/to/ca.crt"))  // 信任根证书
        .crl(crlList)  // 配置CRL列表
        .build();
    
  3. 配置NettyServerBuilder
    将构建好的SslContext传入服务端构建器:

    import io.grpc.netty.NettyServerBuilder;
    
    NettyServerBuilder serverBuilder = NettyServerBuilder.forPort(8080)
        .sslContext(sslContext)
        // 其他服务配置(如添加GRPC服务实现)
        .addService(new YourGrpcService());
    
    serverBuilder.build().start();
    

方法二:自定义TrustManager实现更灵活的CRL校验

如果需要自定义CRL校验逻辑(比如额外检查CRL有效期、发布者合法性等),可以包装默认TrustManager实现:

  1. 加载CRL和默认TrustManager

    // 加载CRL(同方法一)
    CertificateFactory crlFactory = CertificateFactory.getInstance("X.509");
    Collection<? extends CRL> crlList = crlFactory.generateCRLs(new FileInputStream("/path/to/revocation.crl"));
    
    // 获取基于信任根证书的默认TrustManager
    TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init((KeyStore) null);  // 若信任证书存储在KeyStore中,传入对应的KeyStore对象
    X509TrustManager defaultTm = (X509TrustManager) tmf.getTrustManagers()[0];
    
  2. 自定义X509TrustManager
    在默认校验逻辑基础上,添加CRL吊销检查:

    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    
    X509TrustManager customTm = new X509TrustManager() {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            // 先执行默认的证书信任校验
            defaultTm.checkClientTrusted(chain, authType);
            // 检查证书是否被CRL吊销
            for (X509Certificate cert : chain) {
                for (CRL crl : crlList) {
                    if (crl.isRevoked(cert)) {
                        throw new CertificateException("Client certificate revoked by CRL");
                    }
                }
            }
        }
    
        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            defaultTm.checkServerTrusted(chain, authType);
            // 若需要校验服务端证书的CRL状态,可添加相同逻辑
        }
    
        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return defaultTm.getAcceptedIssuers();
        }
    };
    
  3. 构建SslContext并配置服务端

    SslContext sslContext = SslContextBuilder.forServer(
            new File("/path/to/server.crt"),
            new File("/path/to/server.key")
        )
        .trustManager(customTm)  // 使用自定义TrustManager
        .build();
    
    NettyServerBuilder serverBuilder = NettyServerBuilder.forPort(8080)
        .sslContext(sslContext)
        .addService(new YourGrpcService())
        .build();
    
    serverBuilder.start();
    

注意事项

  • 确保CRL文件为X.509标准格式,常见后缀为.crl或.pem
  • 若CRL更新,需重新加载并重建SslContext才能生效
  • grpc-netty 1.44.1依赖的Netty版本为4.1.x,SslContextBuilder.crl()方法在该版本已稳定支持

内容的提问来源于stack exchange,提问作者jiangxi jiang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:37:45