Go to main content
Oracle® Solaris 11.3 での Image Packaging System を使用したソフトウェアのパッケージ化と配布

印刷ビューの終了

更新: 2016 年 11 月
 
 

署名付きパッケージのトラブルシューティング

pkgsign ツールでは、パッケージの署名時にその入力に対して可能なすべてのチェックを行うわけではありません。そのため、署名付きパッケージをチェックして、署名後にそれらが適切にインストールされるようにすることが重要です。

このセクションでは、署名付きパッケージのインストールまたは更新を試みたときに発生する可能性のあるエラーを示し、それらのエラーの説明と問題の解決策を提供します。

署名付きパッケージは、署名付きパッケージに固有の理由でインストールまたは更新に失敗することがあります。たとえば、パッケージの署名の検証に失敗した場合、または信頼チェーンが検証できないか、信頼できる証明書にアンカーを設定できない場合、そのパッケージはインストールに失敗します。

イメージとパブリッシャーのプロパティーの構成

このセクションで説明するイメージとパブリッシャーのプロパティーは、署名付きパッケージに対して行われるチェックに影響します。

イメージプロパティーを構成するには、pkg コマンドの set-propertyadd-property-valueremove-property-value、および unset-property サブコマンドを使用します。

特定のパブリッシャーの署名ポリシーと必要な名前を指定するには、set-publisher サブコマンドの --set-property--add-property-value--remove-property-value、および --unset-property オプションを使用します。

例については、Oracle Solaris 11.3 ソフトウェアの追加と更新 の パッケージの署名プロパティーの構成を参照してください。

次のイメージプロパティーを、署名付きパッケージを使用するように構成します。

signature-policy

このプロパティーの値により、イメージ内のパッケージのインストール、更新、変更、または検証時に、マニフェストに実行されるチェックが決まります。パッケージに適用される最終的なポリシーは、イメージポリシーとパブリッシャーポリシーの組み合わせに依存します。この組み合わせの厳格さは、少なくとも、この 2 つのポリシーが個別に適用された場合の厳格な方と同じです。デフォルトでは、パッケージクライアントは証明書が失効済みかどうかをチェックしません。そのようなチェック (クライアントから外部 Web サイトへのアクセスが必要な場合がある) を有効にするには、check-certificate-revocation イメージプロパティーを true に設定します。次の値が許可されます。

ignore

すべてのマニフェストの署名を無視します。

verify

署名が含まれているすべてのマニフェストが有効に署名されていることを確認しますが、インストール済みパッケージがすべて署名されている必要はありません。

これがデフォルト値です。

require-signatures

新しくインストールされたすべてのパッケージに、有効な署名が少なくとも 1 つ含まれている必要があります。インストール済みパッケージに有効な署名が含まれていない場合は、pkg fix および pkg verify コマンドでも警告が表示されます。

require-names

require-signatures と同じ要件に従いますが、signature-required-names イメージプロパティーで一覧表示される文字列が、署名の信頼のチェーンを検証するために使用される証明書の共通名としても表示される必要があります。

signature-required-names

このプロパティーの値は、パッケージの署名の検証中に、証明書の共通名として表示される必要のある名前の一覧です。

trust-anchor-directory

イメージのトラストアンカーを含むディレクトリの相対パス名 (イメージのルートに対して相対的)。デフォルトは etc/certs/CA/ です。

独自の SSL 証明書認証局証明書を作成する場合は、カスタム証明書認証局証明書の使用方法の説明に従って、それらの証明書を trust-anchor-directory によって名前が付けられたディレクトリに配置し、ca-certificates サービスをリフレッシュします。CA 証明書は trust-anchor-directory によって名前が付けられたディレクトリに直接配置し、証明書を別のサブディレクトリに配置しないでください。

次のパブリッシャープロパティーを、特定のパブリッシャーからの署名付きパッケージを使用するように構成します。

signature-policy

このプロパティーの機能は、このプロパティーが指定したパブリッシャーからのパッケージにのみ適用される点を除き、signature-policy イメージプロパティーの機能と同じです。

signature-required-names

このプロパティーの機能は、このプロパティーが指定したパブリッシャーからのパッケージにのみ適用される点を除き、signature-required-names イメージプロパティーの機能と同じです。

チェーン証明書が見つからない

次のエラーは、信頼チェーン内の証明書が存在しないか、または間違っている場合に発生します。

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(7)
does not understand.
Extension name:keyUsage
Extension value:Encipher Only

この場合、pkgkeyUsage 拡張機能を認識しますが、その値 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