Solaris 10二进制签名证书生成指南:解决elfsign工具PKCS#10格式兼容性问题


阅读 2 次

问题现象与背景

在Solaris 10系统上使用elfsign工具签名二进制时,会遇到证书加载失败的问题。错误表现为:

elfsign sign -c solaris10.crt -k solaris10.key -e libeel-2.so
# 返回错误状态码4(证书未加载)

与Solaris 11不同,Solaris 10对证书格式有特殊要求,直接使用OpenSSL生成的PEM格式证书会出现兼容性问题。

证书格式要求解析

Solaris 10的elfsign工具需要符合以下要求的证书:

  • 必须使用PKCS#10格式
  • 密钥需采用RSA算法
  • 不支持PEM格式的直接加载

正确的证书生成方法

以下是经过验证可用的证书生成流程:

# 1. 生成私钥(RSA 2048位)
openssl genrsa -out solaris10.key 2048

# 2. 创建证书签名请求(CSR)
openssl req -new -key solaris10.key -out solaris10.csr \
-subj "/C=CN/ST=Guangdong/L=Shenzhen/O=YourCompany/CN=solaris10"

# 3. 生成自签名证书(X.509格式)
openssl x509 -req -days 3650 -in solaris10.csr \
-signkey solaris10.key -out solaris10.crt \
-outform DER  # 关键:必须使用DER格式

常见错误解决方案

错误1:无法加载私钥

elfsign: Unable to load private key: snakeoil.key

解决方案:确保私钥是PKCS#8格式:

openssl pkcs8 -topk8 -inform PEM -outform DER \
-in solaris10.key -out solaris10.key.der -nocrypt

错误2:证书格式不兼容

必须将证书转换为DER格式:

openssl x509 -in solaris10.pem -outform DER -out solaris10.der

完整签名示例

成功执行的完整命令序列:

# 生成密钥对
openssl genrsa -out mykey.key 2048
openssl req -new -key mykey.key -out mykey.csr \
-subj "/C=CN/ST=Beijing/L=Beijing/O=DevTeam/CN=devhost"

# 转换为Solaris 10兼容格式
openssl x509 -req -days 365 -in mykey.csr \
-signkey mykey.key -out mycert.crt -outform DER
openssl pkcs8 -topk8 -inform PEM -outform DER \
-in mykey.key -out mykey.der -nocrypt

# 执行签名
elfsign sign -c mycert.crt -k mykey.der -e libeel-2.so

验证签名结果

使用以下命令验证签名是否成功:

elfsign verify -e libeel-2.so

成功输出应显示:

elfsign: verification of 'libeel-2.so' passed