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

如何搭建适配私有中间CA签名证书的OCSP响应器

问题1:是否需要自行开发OCSP响应器,以及CGI实现要求与示例

你当前的私有CA非公开场景,完全可以基于openssl封装CGI实现轻量生产可用的OCSP响应器,无需部署重型PKI系统。

开发核心要求:

  • 适配OCSP标准请求格式:处理POST请求时读取application/ocsp-request类型的DER编码请求体;处理GET请求时解码路径中携带的Base64URL格式DER报文,得到原始查询内容
  • 校验查询合法性:匹配查询的证书颁发者DN与对应CA证书的DN,拦截非目标CA的恶意查询
  • 调用openssl读取CA状态:openssl自带的ocsp命令可直接读取CA签发时维护的index.txt吊销状态索引文件,直接生成合法的DER格式OCSP响应
  • 响应头符合标准:返回时设置Content-Type为application/ocsp-response,根据你的吊销列表更新频率配置Cache-Control的max-age值
  • 响应签名合规:单独生成一对OCSP签名证书,由对应层级的CA签发,且携带OCSP签名的Extended Key Usage扩展,否则客户端会拒绝信任返回的响应

可直接使用的Perl CGI示例:

#!/usr/bin/perl
use strict;
use warnings;
use MIME::Base64 qw(decode_base64url);

# 不同层级CA的OCSP服务替换对应配置即可
my $CA_CERT = "/path/to/对应CA证书路径.crt";
my $OCSP_SIGN_CERT = "/path/to/OCSP签名证书.crt";
my $OCSP_SIGN_KEY = "/path/to/OCSP签名证书密钥.key";
my $CA_INDEX = "/path/to/对应CA的index.txt路径";
my $RESPONSE_CACHE_SEC = 86400; # 响应缓存时长,单位秒

my $ocsp_req;
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
    read(STDIN, $ocsp_req, $ENV{'CONTENT_LENGTH'});
} elsif ($ENV{'REQUEST_METHOD'} eq 'GET') {
    my $encoded_req = $ENV{'PATH_INFO'};
    $encoded_req =~ s/^\///;
    $ocsp_req = decode_base64url($encoded_req);
} else {
    print "Status: 405 Method Not Allowed\r\n\r\n";
    exit;
}

# 调用openssl生成OCSP响应
open my $ocsp_proc, '|-', "openssl ocsp -index $CA_INDEX -CA $CA_CERT -rsigner $OCSP_SIGN_CERT -rkey $OCSP_SIGN_KEY -ndays 1 -reqin /dev/stdin -respout /dev/stdout -no_nonce 2>/dev/null" or do {
    print "Status: 500 Internal Server Error\r\n\r\n";
    exit;
};
print $ocsp_proc $ocsp_req;
close $ocsp_proc;
my $ocsp_resp = do { local $/; <$ocsp_proc> };

# 输出响应
print "Content-Type: application/ocsp-response\r\n";
print "Cache-Control: max-age=$RESPONSE_CACHE_SEC, public\r\n";
print "Content-Length: " . length($ocsp_resp) . "\r\n\r\n";
print $ocsp_resp;

使用前给脚本加执行权限,index.txt给Web进程开放读权限,OCSP签名密钥权限设为600即可。


问题2:共享主机部署可行性

可以正常部署,只要你使用的ISP共享主机支持CGI执行(绝大多数主流共享主机都支持Perl、PHP类CGI脚本),把脚本放到主机允许执行CGI的目录(通常为cgi-bin目录),签发证书时给对应证书添加Authority Information Access扩展,指定OCSP URI为脚本的公网访问地址即可。完全兼容OCSP stapling,你的私有服务器只要定期从该OCSP地址拉取对应证书的状态,TLS握手时随证书一起发给客户端即可。


问题3:多层级OCSP部署与主机资质要求

  • 两个不同层级的OCSP响应器完全可以部署在同一台主机,用不同URI区分即可。比如根CA校验中间证书的OCSP服务用https://你的OCSP域名/ocsp/root/,中间CA校验服务器证书的OCSP服务用https://你的OCSP域名/ocsp/intermediate/,两个脚本分别加载对应层级的CA证书、索引文件和OCSP签名证书即可,互相不会产生干扰。
  • 承载OCSP响应器的商业主机本身不需要任何额外认证。客户端信任OCSP响应的前提是响应本身由对应CA签发的OCSP签名证书签名,和承载主机的资质、主机使用的证书没有关系,哪怕OCSP服务走HTTP协议都不会影响校验结果,响应本身自带签名防篡改。

内容的提问来源于stack exchange,提问作者Yuma Technical Inc.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:45:03