在Alpine系统从OpenSSL1迁移至OpenSSL3时的证书版本问题
问题解决建议
原因分析
OpenSSL 3.x 对证书版本的触发逻辑做了调整:在 OpenSSL 1.x 中,即使指定的v3_req扩展段为空,只要使用-extensions v3_req参数,就会默认生成版本3(0x2)的证书;但 OpenSSL 3.x 要求v3_req段必须包含至少一个有效的v3扩展字段,才会将证书版本升级为3,否则会默认生成版本1(0x0)的证书。
解决方案
提供两种可行的修改方式:
方式一:添加有效v3扩展字段
在扩展段中加入至少一个v3证书扩展(比如基本约束),让OpenSSL 3.x识别为v3证书,修改后的命令如下:
openssl x509 -req \ -days 365 \ -in certs/csr.pem \ -CA certs/cert.pem \ -CAkey certs/key.pem \ -set_serial 1 \ -outform PEM \ -out signed_cert.pem \ -sha256 \ -extfile <(cat <(printf "[ v3_req ]\nbasicConstraints = CA:FALSE")) \ -extensions v3_req
方式二:强制指定证书版本
直接使用-set_version 3参数强制生成版本3的证书,命令修改如下:
openssl x509 -req \ -days 365 \ -in certs/csr.pem \ -CA certs/cert.pem \ -CAkey certs/key.pem \ -set_serial 1 \ -set_version 3 \ -outform PEM \ -out signed_cert.pem \ -sha256 \ -extfile <(cat <(printf "[ v3_req ]")) \ -extensions v3_req
验证方法
执行以下命令检查证书版本:
openssl x509 -noout -text -in signed_cert.pem
确认输出中Version字段显示为Version: 3 (0x2)即可。
内容的提问来源于stack exchange,提问作者Elia
相关产品推荐
相关产品推荐

