问题现象与背景
在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