如何用Windows版OpenSSL3.2.1生成符合RFC8017且trailer为0xBC的RSASSA-PSS证书
解决OpenSSL生成RSASSA-PSS证书时Trailer字段为0x01的问题
问题背景
我们使用Windows版本的OpenSSL 3.2.1,希望生成符合RFC8017规范、满足以下条件的RSASSA-PSS证书:
- 哈希算法:SHA-256
- 掩码生成函数:带SHA-256的MGF1
- 盐长度:32字节
- Trailer字段:0xBC
但当前生成的证书中Trailer字段始终为0x01,原操作步骤如下:
- 生成密钥:
openssl genpkey -algorithm rsa-pss -pkeyopt rsa_keygen_bits:4096 -pkeyopt rsa_pss_keygen_md:sha256 -pkeyopt rsa_pss_keygen_mgf1_md:sha256 -pkeyopt rsa_pss_keygen_saltlen:32 -out 20240314_privateKey.pem
- 生成证书:
openssl req -new -nodes -x509 -days 3650 -pkeyopt rsa_keygen_bits:4096 -sigopt rsa_pss_saltlen:32 -key 20240314_privateKey.pem -out 20240314_certifcate.pem
- 查看证书:
openssl x509 -in 20240314_certifcate.pem -text
证书查看结果显示:
...
Mask Algorithm: mgf1 with sha256
Salt Length: 0x20
Trailer Field: 0x01 (default)
...
解决方案
问题根源是密钥生成和证书签名阶段都未明确指定Trailer字段参数,OpenSSL默认使用0x01作为Trailer字段值。需在两个步骤中分别添加对应参数:
修正后的操作步骤
- 重新生成包含Trailer字段配置的RSA-PSS密钥
openssl genpkey -algorithm rsa-pss -pkeyopt rsa_keygen_bits:4096 -pkeyopt rsa_pss_keygen_md:sha256 -pkeyopt rsa_pss_keygen_mgf1_md:sha256 -pkeyopt rsa_pss_keygen_saltlen:32 -pkeyopt rsa_pss_keygen_trailerfield:0xbc -out 20240314_privateKey.pem
新增-pkeyopt rsa_pss_keygen_trailerfield:0xbc参数,将密钥的默认Trailer字段设置为0xBC。
- 生成证书时指定Trailer字段签名参数
openssl req -new -nodes -x509 -days 3650 -key 20240314_privateKey.pem -sigopt rsa_pss_saltlen:32 -sigopt rsa_pss_trailerfield:0xbc -out 20240314_certifcate.pem
- 移除原命令中多余的
-pkeyopt rsa_keygen_bits:4096(密钥已生成,无需重复指定长度) - 新增
-sigopt rsa_pss_trailerfield:0xbc参数,确保签名过程使用0xBC作为Trailer字段。
- 验证结果
再次执行证书查看命令:
openssl x509 -in 20240314_certifcate.pem -text
此时输出的Trailer字段将显示为0xBC,符合预设要求。
内容的提问来源于stack exchange,提问作者Thomas Volle
相关产品推荐
相关产品推荐

