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 servers hostname) []:MyOrg Root CA Email Address []:adminmyorg.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)创建包含数字签名用途的CSRopenssl 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 devmyorg.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搭建到最终签名证书生成的全流程。这套方案不仅适用于代码签名也可用于文档签名、驱动签名等场景为国产化环境下的应用部署提供了完整的安全凭证解决方案。