ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris 11.1 での Image Packaging System を使用したソフトウェアのパッケージ化および配布 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
この例では、パッケージが署名されるときに信頼チェーン内に 3 つの証明書がありました。信頼チェーンはトラストアンカーの 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 を使用して証明書チェーンを作成した場合、テストのためにのみ使用される証明書を社外で検証してもらう理由がほとんどないために、ルート証明書は通常、自己署名されます。
テストの状況では、2 つの解決策があります。
最初の解決策は、信頼チェーンのルートとなる自己署名付き証明書を /etc/certs/CA 内に追加し、system/ca-certificates サービスをリフレッシュすることです。これは、オペレーティングシステムとともにトラストアンカーとして配布される証明書を最終的にルートとする証明書で本稼働用のパッケージが署名されるという、顧客が遭遇する可能性のある状況を反映しています。
2 つめの解決策は、pkg set-publisher コマンドで --approve-ca-cert オプションを使用することで、テスト用のパッケージを提供する発行元の自己署名付き証明書を承認することです。
次のエラーは、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
このようなエラーの考えられる原因は 2 つあります。
可能性のある最初の原因は、パッケージがその署名以降に変更されていることです。これは起こりそうにないことですが、署名以降にパッケージマニフェストが手動で編集された場合は起こり得ます。パッケージが新しいタイムスタンプを取得すると古い署名は無効になるため、pkgsend は発行中に既存の signature アクションを取り除きます。そのため、手動操作がなければ、パッケージはその署名以降に変更されなかったはずです。
2 つ目のより可能性の高い原因は、パッケージの署名に使用された鍵と証明書が一致するペアではなかったことです。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 (証明書失効リスト) の署名にのみ有効であることを意味しています。
次のエラーは、証明書が発行元から最後に取り出された以降に変更されたことを示しています。
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