跳过导航链接 | |
退出打印视图 | |
![]() |
在 Oracle Solaris 11.1 中使用映像包管理系统打包和交付软件 Oracle Solaris 11.1 Information Library (简体中文) |
pkgsign 工具在对软件包进行签名时不对其输入执行所有可能检查。所以,检查已签名的软件包以确保它们在签名后可以正确安装是非常重要的。
本节显示了尝试安装或更新已签名软件包时出现的错误,并提供了这些错误的说明和问题的解决方案。
已签名软件包可能会因为已签名软件包的特有原因而安装或更新失败。例如,如果软件包的签名验证失败,或者如果信任链无法验证或固定到信任证书,则软件包将安装失败。
当安装签名的软件包时,下列映像和发布者属性将会影响软件包上执行的检查:
映像属性
signature-policy
signature-required-names
trust-anchor-directory
发布者属性
signature-policy
signature-required-names
有关这些属性及其值的更多信息,请参见 pkg(1) 手册页。
当信任链中的证书缺失或发生错误时,将会出现以下错误。
pkg install: The certificate which issued this certificate: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1_ta3/emailAddress=cs1_ch1_ta3 could not be found. The issuer is: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta3/emailAddress=ch1_ta3 The package involved is: pkg://test/example_pkg@1.0,5.11-0:20110919T184152Z
在此示例中,当对软件包进行签名时,信任链中有三个证书。信任链源于信任锚(名为 ta3 的证书)。ta3 证书对名为 ch1_ta3 的链证书进行签名,ch1_ta3 对名为 cs1_ch1_ta3 的代码签名证书进行签名。
当 pkg 命令尝试安装软件包时,能够找到代码签名证书 cs1_ch1_ta3,但是找不到链证书 ch1_ta3,所以无法建立信任链。
该问题最常见的原因是未能向 pkgsign 的 -i 选项提供正确的证书。
以下错误与前一示例中显示的错误相似,但原因不同。
pkg install: The certificate which issued this certificate: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_cs8_ch1_ta3/emailAddress=cs1_cs8_ch1_ta3 could not be found. The issuer is: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs8_ch1_ta3/emailAddress=cs8_ch1_ta3 The package involved is: pkg://test/example_pkg@1.0,5.11-0:20110919T201101Z
在本例中,使用 cs1_cs8_ch1_ta3 证书对软件包进行签名,该证书则由 cs8_ch1_ta3 证书进行签名。
问题是 cs8_ch1_ta3 证书未被授权对其他证书进行签名。具体来说,cs8_ch1_ta3 证书将 basicConstraints 扩展设置为 CA:false 并标记为关键。
当 pkg 命令验证信任链时,没有找到允许对 cs1_cs8_ch1_ta3 证书进行签名的证书。因为信任链不能从叶到根进行验证,所以 pkg 命令阻止安装软件包。
当信任链以系统不信任的自签名证书结尾时,将会出现以下错误。
pkg install: Chain was rooted in an untrusted self-signed certificate. The package involved is:pkg://test/example_pkg@1.0,5.11-0:20110919T185335Z
当您使用 OpenSSL 创建一个证书链以进行测试时,根证书通常是自签名,因为几乎没有理由让一个外部公司验证只用于测试的证书。
在测试情况下,有两种解决方案:
第一个解决方案是将作为信任链的根的自签名证书添加到 /etc/certs/CA 并刷新 system/ca-certificates 服务。这反映了客户可能遇到的情况,其中生产软件包由某个证书签名,该证书最终源于操作系统附带的作为信任锚的证书。
第二个解决方案是批准发布者的自签名证书,该发布者使用 --approve-ca-cert 选项和 pkg set-publisher 命令提供测试的软件包。
当无法使用操作声明中与用来为软件包签名的密钥配对的证书来验证 signature 操作中的值时,将出现以下错误。
pkg install: A signature in pkg://test/example_pkg@1.0,5.11-0:20110919T195801Z could not be verified for this reason: The signature value did not match the expected value. Res: 0 The signature's hash is 0ce15c572961b7a0413b8390c90b7cac18ee9010
这种错误可能有两种原因:
第一个可能的原因是软件包自签名后已进行更改。这是不大可能的,但是如果软件包清单自签名后进行了手动编辑,这也是有可能的。如果不进行手动干预,软件包自签名后不应该会更改,因为 pkgsend 在发布期间可以去除现有 signature 操作,软件包获得新时间戳时旧签名将变为无效。
第二个最可能的原因是用来对软件包进行签名的密钥和证书不是匹配的密钥/证书对。如果提供给 pkgsign 的 -c 选项的证书不是使用提供给 pkgsign 的 -k 选项的密钥创建的,尽管会对软件包签名,但是其签名将无法验证。
当信任链中的证书使用 pkg 不能理解的关键扩展时,将会出现以下错误。
pkg install: The certificate whose subject is /C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs2_ch1_ta3/emailAddress=cs2_ch1_ta3 could not be verified because it uses a critical extension that pkg5 cannot handle yet. Extension name:issuerAltName Extension value:<EMPTY>
在 pkg 了解如何处理该关键扩展之前,唯一的解决方案是重新生成证书,而不包含有问题的关键扩展。
以下错误与前一错误相似,只是问题不是在于不熟悉的关键扩展而是在于一个值,针对 pkg 理解的扩展,pkg 却无法理解该值。
pkg install: The certificate whose subject is /C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs5_ch1_ta3/emailAddress=cs5_ch1_ta3 could not be verified because it has an extension with a value that pkg(5) does not understand. Extension name:keyUsage Extension value:Encipher Only
在本例中,pkg 理解 keyUsage 扩展,但是不理解 Encipher Only 值。无论有问题的扩展是否关键,错误看起来都一样。
在 pkg 了解有问题的值之前,解决方案是将该值从扩展中删除,或将扩展全部删除。
当证书用于它未经授权的用途时,将会出现以下错误。
pkg install: The certificate whose subject is /C=US/ST=California/L=Menlo Park/O=pkg5/CN=ch1_ta3/emailAddress=ch1_ta3 could not be verified because it has been used inappropriately. The way it is used means that the value for extension keyUsage must include 'DIGITAL SIGNATURE' but the value was 'Certificate Sign, CRL Sign'.
在本例中,ch1_ta3 证书被用来对软件包进行签名。证书的 keyUsage 扩展意味着证书只有在对其他证书和 CRL(Certificate Revocation List,证书吊销列表)进行签名时才是有效的。
以下错误表示自上次从发布者检索证书后已对其进行了更改。
pkg install: Certificate /tmp/ips.test.7149/0/image0/var/pkg/publisher/test/certs/0ce15c572961b7a0413b8390c90b7cac18ee9010 has been modified on disk. Its hash value is not what was expected.
提供的路径处的证书用于验证正在安装的软件包,但是磁盘上内容的散列与签名操作所预期的散列不匹配。
简单解决方案是删除证书并允许 pkg 重新下载证书。
以下错误指示处于要安装的软件包的信任链中的有问题证书已被该证书的颁发者吊销。
pkg install: This certificate was revoked: /C=US/ST=California/L=Menlo Park/O=pkg5/CN=cs1_ch1_ta4/emailAddress=cs1_ch1_ta4 for this reason: None The package involved is: pkg://test/example_pkg@1.0,5.11-0:20110919T205539Z