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

DER格式的OCSP响应能否与PEM互转?是否可通过OpenSSL C API实现?

问题解答

OCSP响应DER与PEM转换合法性

首先明确:OCSP响应的DER转PEM是完全合法的无损转换,转换后可以100%还原为原始DER格式用于OCSP stapling,不存在兼容性问题。
PEM格式的本质就是对原始DER二进制做Base64编码,再添加固定的头尾标识:

-----BEGIN OCSP RESPONSE-----
[Base64编码后的DER内容]
-----END OCSP RESPONSE-----

这种存储方式比裸Base64更推荐,因为头尾标识明确了内容类型,避免和其他Base64编码的凭证(比如证书、私钥)混淆,同时也兼容OpenSSL命令行等通用工具的直接解析,方便问题排查。

OpenSSL C API转换方法

不需要将OCSP响应转为X509对象,OpenSSL为OCSP响应提供了专属的编解码接口,操作步骤如下:

DER转PEM流程

  1. 先将读取到的DER格式二进制数据转为OCSP_RESPONSE对象:
OCSP_RESPONSE *resp = d2i_OCSP_RESPONSE(NULL, &der_data_ptr, der_data_len);
if (resp == NULL) {
    // 错误处理逻辑
}
  1. 再将OCSP_RESPONSE对象写入PEM格式:
// 写入文件的场景
FILE *pem_file = fopen("ocsp_resp.pem", "w");
PEM_write_OCSP_RESPONSE(pem_file, resp);

// 写入内存BIO的场景
BIO *bio = BIO_new(BIO_s_mem());
PEM_write_bio_OCSP_RESPONSE(bio, resp);

PEM转回DER流程

  1. 读取PEM内容到OCSP_RESPONSE对象:
// 从文件读取
OCSP_RESPONSE *resp = PEM_read_OCSP_RESPONSE(pem_file, NULL, NULL, NULL);
// 从内存BIO读取
OCSP_RESPONSE *resp = PEM_read_bio_OCSP_RESPONSE(bio, NULL, NULL, NULL);
  1. 从OCSP_RESPONSE对象导出原始DER二进制:
int der_len = i2d_OCSP_RESPONSE(resp, &der_data_ptr);
if (der_len <= 0) {
    // 错误处理逻辑
}
// 导出的der_data_ptr指向的内存就是原始DER格式,可直接用于stapling

注意事项

所有操作完成后需要调用OCSP_RESPONSE_free(resp)释放对象内存,避免内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:36:02