银河麒麟服务器操作系统下构建私有CA与签发代码签名证书实战指南
2026/7/13 12:32:24 网站建设 项目流程

1. 环境准备与基础概念

在银河麒麟服务器操作系统上构建私有CA并签发代码签名证书,首先需要理解几个核心概念。就像盖房子需要打地基一样,搭建证书体系也需要先做好准备工作。

什么是私有CA?简单来说,它就像你自己家的"派出所",可以给自己人发"身份证"(证书)。与公共CA(如VeriSign)不同,私有CA颁发的证书只在你的组织内部被信任,特别适合企业内部软件分发和安全管控。

在开始之前,请确保你的银河麒麟系统已经安装好OpenSSL工具包。可以通过以下命令检查:

rpm -qa openssl

如果系统提示未安装,使用yum命令安装(在线环境):

yum install -y openssl openssl-devel

如果是离线环境,需要提前下载好对应架构的RPM包,用rpm命令手动安装。这里有个小技巧:银河麒麟V10通常自带OpenSSL 1.1.1版本,建议先检查现有版本是否满足需求,避免版本冲突。

2. 配置OpenSSL环境

OpenSSL的配置文件是整套体系的"交通规则",位于/etc/pki/tls/openssl.cnf。这个文件定义了证书生成的各项参数,就像城市规划图一样重要。

2.1 关键目录结构

先来看看默认的PKI目录结构:

/etc/pki/ ├── CA/ # CA根目录 │ ├── certs/ # 已签发证书存放处 │ ├── crl/ # 证书吊销列表 │ ├── newcerts/ # 新签发证书备份 │ └── private/ # 私钥保管处(务必保密!) └── tls/ └── openssl.cnf # 主配置文件

建议先在/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

2.2 修改openssl.cnf

找到配置文件中的[ CA_default ]段,确保以下关键参数正确:

dir = /etc/pki/CA # CA根目录 certificate = $dir/cacert.pem # CA证书路径 private_key = $dir/private/cakey.pem # CA私钥路径

对于代码签名证书,特别要注意keyUsage设置。在[ usr_cert ]段添加:

keyUsage = digitalSignature, nonRepudiation extendedKeyUsage = codeSigning

这就像给证书打上"仅限代码签名"的标签,避免证书被滥用。

3. 创建根证书

建立私有CA就像成立一家公司,首先需要注册营业执照(根证书)。这个过程分为三步:生成私钥 → 创建证书请求 → 自签名。

3.1 生成CA私钥

使用2048位RSA算法生成私钥:

openssl genrsa -aes256 -out /etc/pki/CA/private/cakey.pem 2048

这里使用了AES256加密私钥,系统会提示输入密码。如果觉得每次输入密码麻烦,可以去掉-aes256参数,但安全性会降低。

3.2 创建证书请求

生成CSR(证书签名请求):

openssl req -new -key /etc/pki/CA/private/cakey.pem \ -out /etc/pki/CA/careq.pem \ -config /etc/pki/tls/openssl.cnf

这里会交互式询问证书信息,有几个字段需要注意:

  • Country Name:使用两位国家代码,如CN
  • Common Name:建议用公司域名,如"Company Root CA"
  • Organizational Unit:可以填写"Certificate Authority"

3.3 自签名根证书

最后一步给自己颁发证书:

openssl ca -create_serial -out /etc/pki/CA/cacert.pem \ -days 3650 -keyfile /etc/pki/CA/private/cakey.pem \ -selfsign -extensions v3_ca \ -infiles /etc/pki/CA/careq.pem

这里设置了10年有效期(3650天)。完成后,可以用命令查看证书详情:

openssl x509 -in /etc/pki/CA/cacert.pem -noout -text

4. 签发代码签名证书

有了根证书,现在可以给开发者或构建服务器颁发代码签名证书了。这就像公司给员工发工作证。

4.1 生成签名密钥对

先为签名证书创建私钥:

openssl genrsa -aes256 -out codesign.key 2048

4.2 创建证书请求

生成CSR时,特别注意CN字段要标识使用者身份:

openssl req -new -key codesign.key \ -out codesign.csr \ -config /etc/pki/tls/openssl.cnf

在交互过程中,建议这样填写:

  • Organization Name:软件开发商名称
  • Common Name:最好包含"Code Signing"字样

4.3 签发证书

使用CA签发代码签名证书:

openssl ca -config /etc/pki/tls/openssl.cnf \ -extensions usr_cert -days 730 -notext \ -in codesign.csr -out codesign.crt

这里设置了2年有效期(730天)。关键点是-extensions usr_cert,它会应用之前在配置文件中设置的Key Usage。

5. 证书格式转换与使用

不同平台需要不同格式的证书文件,就像电器需要适配不同国家的插座。

5.1 生成PFX/PKCS12文件

Windows平台通常使用PFX格式:

openssl pkcs12 -export -inkey codesign.key \ -in codesign.crt -certfile /etc/pki/CA/cacert.pem \ -out codesign.pfx

系统会提示设置导出密码,这个密码在安装证书时需要输入。

5.2 生成P7B证书链

有些场景需要完整的证书链:

openssl crl2pkcs7 -nocrl -certfile codesign.crt \ -certfile /etc/pki/CA/cacert.pem \ -out codesign.p7b -outform DER

5.3 在银河麒麟上使用证书

对二进制文件签名的典型命令:

openssl smime -sign -binary -in app.bin \ -out app.signed -signer codesign.crt \ -inkey codesign.key -certfile /etc/pki/CA/cacert.pem

验证签名:

openssl smime -verify -binary -in app.signed \ -content app.bin -CAfile /etc/pki/CA/cacert.pem

6. 常见问题排查

在实际操作中可能会遇到这些问题:

问题1:签名时报错"unable to load CA private key"

  • 检查私钥路径是否正确
  • 如果私钥有密码保护,确保正确输入

问题2:系统不信任签名

  • 确保根证书已导入系统的信任存储
  • 检查证书的扩展密钥用法是否包含代码签名

问题3:证书链验证失败

  • 使用openssl verify -CAfile cacert.pem codesign.crt检查链完整性
  • 确保证书没有过期

有个实用技巧:可以用openssl x509 -purpose -in cert.crt查看证书的预期用途,确认是否适合代码签名。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询