能否向使用HSM的CA提交自制CSR(PKCS#10文件)?如何操作?
问题解答
一、自行生成CSR提交给CA是否可行?
通常来说,合规的CA(包括你提到的「DIRECCIÓN NACIONAL DE FIRMA DIGITAL」)应该支持申请者自行提交符合PKCS#10标准的CSR,但前提是你需要通过CA的身份核验,且能证明对密钥对的控制权。不过最稳妥的方式是直接咨询该CA的官方支持团队,确认他们是否接受外部生成的CSR,以及有没有特定格式要求(比如密钥算法必须为RSA 2048/4096、是否需要指定证书扩展项等)——部分国家的官方CA可能强制要求密钥对在其指定环境生成,必须先确认这点。
二、用Luna HSM配合OpenSSL生成CSR的方法
若CA确认接受外部CSR,可按以下步骤在Luna HSM中生成密钥对并导出CSR(私钥全程存储在HSM内,不会泄露到本地):
1. 配置OpenSSL关联Luna引擎
确保已安装Luna HSM客户端软件,且OpenSSL可调用Luna引擎(通常为libluna.so类库),可选择两种配置方式:
临时命令行指定(推荐,无需修改全局配置)
后续所有OpenSSL命令前添加-engine luna参数即可,先验证引擎是否正常加载:
openssl engine -t -c luna
永久修改配置文件
编辑openssl.cnf,添加以下内容(替换为你的Luna引擎实际路径):
[engine_section] luna = luna_section [luna_section] engine_id = luna dynamic_path = /usr/lib64/openssl/engines-3/libluna.so # 替换为你的引擎路径 default_algorithms = ALL # PIN可在此指定,或后续命令行输入
2. 在Luna HSM中生成密钥对
执行命令生成密钥对,密钥直接存储在HSM内,本地仅生成无实际私钥的密钥引用文件:
# 生成2048位RSA密钥对,dummy.key为本地引用文件 openssl genrsa -engine luna -out dummy.key 2048
3. 生成PKCS#10格式的CSR
基于HSM内的密钥对生成CSR,执行后按提示填写符合CA要求的证书请求信息:
openssl req -engine luna -new -key dummy.key -out your_csr.pem
若CA要求特定证书扩展项(如密钥用途、扩展密钥用途),可通过配置文件指定:
- 在
openssl.cnf的[req]段添加:req_extensions = v3_req - 添加
[v3_req]段定义扩展:[v3_req] keyUsage = digitalSignature, nonRepudiation extendedKeyUsage = clientAuth, serverAuth - 生成CSR时带上扩展参数:
openssl req -engine luna -new -key dummy.key -out your_csr.pem -extensions v3_req
4. 验证CSR正确性
生成后验证CSR内容,确认其关联的密钥在HSM内:
openssl req -engine luna -in your_csr.pem -text -noout
注意事项
- 确保你的Luna HSM用户账号拥有生成密钥和签名的权限,否则操作会失败。
- 全程不要导出私钥到本地,所有操作通过Luna引擎在HSM内完成,保障密钥安全。
内容的提问来源于stack exchange,提问作者user3281302
相关产品推荐
相关产品推荐

