OpenSSL 1.1.1f 在银河麒麟 V10 搭建证书服务器:3步生成含数字签名的 PFX/P7B 证书链
在国产化技术快速发展的背景下,银河麒麟服务器操作系统凭借其高安全性和稳定性,已成为企业级应用的重要选择。作为国产操作系统的代表,银河麒麟V10在政府、金融等关键领域得到广泛应用。本文将详细介绍如何在该系统上利用OpenSSL 1.1.1f搭建私有证书服务器,并生成可直接用于代码和文档签名的PFX/P7B格式证书链。
1. 环境准备与基础配置
1.1 系统环境确认
首先需要确认系统已安装OpenSSL 1.1.1f版本,这是银河麒麟V10默认提供的加密库版本。执行以下命令检查:
openssl version # 预期输出:OpenSSL 1.1.1f 31 Mar 2025如果系统未安装OpenSSL,可通过以下命令安装:
yum install -y openssl openssl-devel1.2 目录结构初始化
OpenSSL的默认工作目录位于/etc/pki/CA,需要预先创建必要的子目录和文件:
mkdir -p /etc/pki/CA/{certs,crl,newcerts,private} touch /etc/pki/CA/index.txt echo "01" > /etc/pki/CA/serial chmod 700 /etc/pki/CA/private注意:
index.txt用于记录证书签发信息,serial文件存储下一个证书的序列号。
2. 构建私有CA体系
2.1 生成CA根证书密钥
使用2048位RSA算法生成CA私钥,建议使用AES-256加密保护私钥:
openssl genrsa -aes256 -out /etc/pki/CA/private/cakey.pem 2048执行后会提示输入保护密码,请务必妥善保管。生成的私钥文件结构如下:
| 文件属性 | 值 |
|---|---|
| 路径 | /etc/pki/CA/private/cakey.pem |
| 权限 | 600 |
| 加密算法 | AES-256 |
| 密钥长度 | 2048位 |
2.2 创建自签名根证书
生成有效期10年的自签名根证书:
openssl req -new -x509 -days 3650 -key /etc/pki/CA/private/cakey.pem \ -out /etc/pki/CA/cacert.pem -extensions v3_ca需要交互式输入以下信息(示例):
Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:MyOrg Organizational Unit Name (eg, section) []:IT Dept Common Name (eg, your name or your server's hostname) []:MyOrg Root CA Email Address []:admin@myorg.com2.3 验证根证书
使用以下命令验证生成的根证书:
openssl x509 -in /etc/pki/CA/cacert.pem -noout -text关键验证点:
- 证书类型应为
CA:TRUE - 密钥用法包含
Certificate Sign - 基本约束为
CA:TRUE - 颁发者与使用者信息一致
3. 签发用户证书并生成交付文件
3.1 创建用户证书密钥
为用户生成加密保护的私钥:
openssl genrsa -aes256 -out user.key 20483.2 生成证书签名请求(CSR)
创建包含数字签名用途的CSR:
openssl req -new -key user.key -out user.csr -config <( cat <<EOF [req] distinguished_name = req_distinguished_name req_extensions = v3_req prompt = no [req_distinguished_name] C = CN ST = Beijing L = Beijing O = MyOrg OU = Dev CN = Code Signing Certificate emailAddress = dev@myorg.com [v3_req] keyUsage = digitalSignature, nonRepudiation extendedKeyUsage = codeSigning, msCodeInd, msCodeCom EOF )3.3 签发用户证书
使用CA根证书签发用户证书,有效期设为2年:
openssl ca -in user.csr -out user.crt -days 730 \ -extensions v3_req -notext -md sha256签发过程会要求输入CA私钥密码,并在index.txt中记录签发信息。
3.4 生成PFX格式证书包
将用户证书和私钥打包为PFX文件,用于代码签名:
openssl pkcs12 -export -out user.pfx -inkey user.key -in user.crt -certfile /etc/pki/CA/cacert.pem参数说明:
-inkey:指定用户私钥文件-in:指定用户证书文件-certfile:包含CA根证书- 会提示设置PFX文件的保护密码
3.5 生成P7B证书链
创建包含完整证书链的P7B文件,用于验证签名:
openssl crl2pkcs7 -nocrl -certfile user.crt -certfile /etc/pki/CA/cacert.pem \ -outform DER -out certchain.p7b4. 证书验证与使用
4.1 PFX证书验证
检查PFX文件内容:
openssl pkcs12 -info -in user.pfx -nodes4.2 代码签名示例
使用生成的PFX证书对Windows可执行文件签名:
osslsigncode sign -pkcs12 user.pfx -pass yourpassword \ -n "My Application" -i http://www.myorg.com/ \ -in app.exe -out app-signed.exe4.3 签名验证
验证签名文件的完整性:
osslsigncode verify -in app-signed.exe5. 国产化环境注意事项
在银河麒麟V10环境中,还需注意以下特殊配置:
- SM2算法支持:如需使用国密算法,需编译支持GMSSL的版本
- 系统信任存储:将CA根证书导入系统信任库
cp /etc/pki/CA/cacert.pem /etc/pki/ca-trust/source/anchors/ update-ca-trust - 时间同步:确保系统时间准确,避免证书有效期验证问题
- 硬件加密支持:如有加密卡设备,可配置OpenSSL引擎提升性能
通过以上步骤,我们完成了从CA搭建到最终签名证书生成的全流程。这套方案不仅适用于代码签名,也可用于文档签名、驱动签名等场景,为国产化环境下的应用部署提供了完整的安全凭证解决方案。