JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
アプリケーションパッケージ開発者ガイド     Oracle Solaris 10 1/13 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  パッケージの設計

2.  パッケージの構築

3.  パッケージの機能の拡張 (タスク)

情報ファイルとインストールスクリプトの作成 (タスクマップ)

情報ファイルの作成

パッケージの依存関係の定義

パッケージの依存関係を定義する方法

著作権に関するメッセージの書き込み

著作権に関するメッセージを書く方法

ターゲットシステムでの追加領域の予約

ターゲットシステムに追加領域を予約する方法

インストールスクリプトの作成

パッケージインストール時のスクリプトの処理

パッケージ削除時のスクリプトの処理

スクリプトで使用できるパッケージ環境変数

スクリプト用パッケージ情報の取得

スクリプトの終了コード

request スクリプトの書き込み

request スクリプトの動作

request スクリプトの設計規則

request スクリプトを書く方法

checkinstall スクリプトでのファイルシステムデータの収集

checkinstall スクリプトの動作

checkinstall スクリプトの設計規則

ファイルシステムデータを収集する方法

手続きスクリプトの書き込み

手続きスクリプトの動作

手続きスクリプトの設計規則

手続きスクリプトを書く方法

クラスアクションスクリプトの書き込み

オブジェクトクラスの定義

パッケージインストール時のクラスの処理方法

パッケージ削除時のクラスの処理方法

クラスアクションスクリプト

クラスアクションスクリプトの動作

クラスアクションスクリプトの設計規則

特殊なシステムクラス

sed クラススクリプト

awk クラススクリプト

build クラススクリプト

preserve クラススクリプト

manifest クラススクリプト

クラスアクションスクリプトを書く方法

署名付きパッケージの作成

署名付きパッケージ

証明書管理

パッケージキーストアへの信頼できる証明書の追加

パッケージキーストアへのユーザー証明書と非公開鍵の追加

パッケージキーストアの内容の確認

パッケージキーストアからの信頼できる証明書と非公開鍵の削除

署名付きパッケージの作成

署名なしディレクトリ形式パッケージを作成する方法

証明書をパッケージキーストアにインポートする方法

パッケージに署名する方法

4.  パッケージの確認と転送

5.  パッケージ作成のケーススタディー

6.  パッケージの作成のための高度な手法

用語集

索引

署名付きパッケージの作成

署名付きパッケージを作成するプロセスには、複数の手順が含まれ、新しい概念と用語を理解する必要があります。このセクションでは、署名付きパッケージ、その用語、および証明書管理に関して説明します。このセクションでは、署名付きパッケージの作成手順についても説明します。

署名付きパッケージ

署名付きパッケージは、次のことを証明するデジタル署名 (次に定義する、PEM でエンコードされた PKCS7 デジタル署名) の付いた通常のストリーム形式のパッケージです。

署名付きパッケージは、署名が付いている点以外は、署名なしパッケージと同一です。署名付きパッケージと署名なしパッケージは、バイナリレベルで互換性があります。したがって、署名付きパッケージは古いバージョンのパッケージツールで使用できます。ただし、その場合、署名は無視されます。

署名付きパッケージ技術には新しい用語と省略名がいくつかあり、それについて次の表で説明します。

用語
定義
ASN.1
Abstract Syntax Notation 1 - 抽象オブジェクトを表現する方法。たとえば、ASN.1 では、公開鍵証明書、証明書を構成するすべてのオブジェクト、オブジェクトの収集順序などが定義されています。ただし、ASN.1 では、オブジェクトを保存用または転送用に直列化する方法は定義されていません。
X.509
ITU-T Recommendation X.509 - 広く採用されている X.509 公開鍵証明書の構文を指定します。
DER
Distinguished Encoding Rules - ASN.1 オブジェクトのバイナリ表現であり、コンピューティング環境で保存用または転送用に ASN.1 オブジェクトを直列化する方法を定義しています。
PEM
Privacy Enhanced Message - Base 64 エンコーディングおよびオプションのヘッダーを使用して、(DER または別のバイナリ形式の) ファイルをエンコードする方法。PEM はもともと、MIME タイプの電子メールメッセージをエンコードするために使用されました。また、PEM は、証明書と非公開鍵をファイルシステム上または電子メールメッセージ内のファイルに符号化する際にも広く使用されています。
PKCS7
Public Key Cryptography Standard #7 - デジタル署名やデジタル封筒などの暗号化データに対する汎用的な構文を定めた規格です。署名付きパッケージには、埋め込まれた PKCS7 署名が含まれます。この署名には少なくとも、パッケージの暗号化されたダイジェストと署名者の X.509 公開鍵証明書が含まれています。また、署名付きパッケージはチェーン証明書を含むこともできます。チェーン証明書は、署名者の証明書からローカルに保存された信頼できる証明書まで、信頼の連鎖を形成するときに使用できます。
PKCS12
Public Key Cryptography Standard #12 - この規格では、暗号化されたオブジェクトをディスクに保存するための構文が規定されています。パッケージのキーストアは、この形式で保持されます。
パッケージキーストア
パッケージツールを使用して照会できる証明書と鍵のリポジトリ。

証明書管理

署名付きパッケージを作成するには、先にパッケージキーストアが存在している必要があります。このパッケージキーストアには、証明書がオブジェクトの形式で含まれます。パッケージキーストアには、2 種類のオブジェクトが存在します。

信頼できる証明書

信頼できる証明書には、別のエンティティーに属する単一の公開鍵証明書が含まれます。信頼できる証明書という呼び名は、証明書に含まれる公開鍵が、その証明書の「サブジェクト」(所有者) によって示された本人のものであることを、キーストアの所有者が信頼することに由来しています。この信頼を表明するために、証明書の発行者はその証明書に署名します。

信頼できる証明書は、署名を検証するとき、およびセキュリティー保護されたサーバーへの接続 (SSL) を開始するときに使用されます。

ユーザー鍵

ユーザー鍵は、暗号鍵に関する機密情報を保持します。この情報は、不正なアクセスを防ぐために、セキュリティーが施された形式で格納されます。ユーザー鍵は、ユーザーの非公開鍵と対応する公開鍵証明書から構成されます。

ユーザー鍵は、署名付きパッケージを作成するときに使用されます。

デフォルトでは、パッケージキーストアは /var/sadm/security ディレクトリに格納されます。個別のユーザーも、独自のキーストアをデフォルトで $HOME/.pkg/security ディレクトリに格納できます。

ディスク上でのパッケージキーストアには、2 種類の形式があります。 つまり、複数ファイル形式と単一ファイル形式です。複数ファイル形式は、オブジェクトを複数のファイルに格納します。オブジェクトの種類ごとに、異なるファイルに保存されます。これらのファイルはすべて、同じパスフレーズを使用して暗号化される必要があります。単一ファイルキーストアは、すべてのオブジェクトをファイルシステムの単一のファイルに格納します。

証明書とパッケージキーストアの管理に使用する主なユーティリティは、pkgadm コマンドです。次に、パッケージキーストアの管理に使用される一般的なタスクについて説明します。

パッケージキーストアへの信頼できる証明書の追加

信頼できる証明書をパッケージキーストアに追加するには、pkgadm コマンドを使用します。PEM または DER の形式の証明書を使用できます。例:

$ pkgadm addcert -t /tmp/mytrustedcert.pem

この例では、mytrustedcert.pem という名前の PEM 形式の証明書を、パッケージキーストアに追加します。

パッケージキーストアへのユーザー証明書と非公開鍵の追加

pkgadm コマンドは、ユーザー証明書または非公開鍵は生成しません。ユーザー証明書と非公開鍵は、通常、Verisign などの認証局から入手します。または、自己署名付き証明書としてローカルで生成します。入手した鍵と証明書は、pkgadm コマンドを使用してパッケージキーストアにインポートできます。例:

pkgadm addcert -n myname -e /tmp/myprivkey.pem /tmp/mypubcert.pem

この例では、次のオプションを使用しています。

-n myname
パッケージキーストアに含まれる対象のエンティティー (myname) を特定します。myname エンティティーは、オブジェクトが格納される別名になります。
-e /tmp/myprivkey.pem
非公開鍵を含むファイルを指定します。この場合、ファイルは myprivkey.pem であり、/tmp ディレクトリにあります。
/tmp/mypubcert.pem
mypubcert.pem という名前の PEM 形式の証明書ファイルを指定します。

パッケージキーストアの内容の確認

pkgadm コマンドは、パッケージキーストアの内容の表示にも使用します。例:

$ pkgadm listcert

このコマンドは、パッケージキーストアに含まれる信頼できる証明書と非公開鍵を表示します。

パッケージキーストアからの信頼できる証明書と非公開鍵の削除

pkgadm コマンドを使用すると、信頼できる証明書と非公開鍵をパッケージキーストアから削除できます。

ユーザー証明書を削除するときは、証明書と鍵のペアの別名を指定する必要があります。例:

$ pkgadm removecert -n myname

証明書の別名は証明書の共通名であり、pkgadm listcert コマンドを使用して識別できます。たとえば、次のコマンドは、Trusted CA Cert 1 という名前の信頼できる証明書を削除します。

$ pkgadm removecert -n "Trusted CA Cert 1"

注 - 信頼できる証明書とユーザー証明書を同じ別名で保存した場合は、-n オプションを指定するとどちらも削除されます。


署名付きパッケージの作成

署名付きパッケージ作成のプロセスは、3 つの基本手順から成ります。

  1. 署名なしディレクトリ形式パッケージの作成。

  2. 署名証明書、CA 証明書、および非公開鍵のパッケージキーストアへのインポート。

  3. 手順 2 の証明書による手順 1 のパッケージへの署名。


注 - パッケージツールでは証明書は作成されません。これらの証明書は、Verisign や Thawte などの認証局から入手する必要があります。


次に、署名付きパッケージ作成の各手順について説明します。

署名なしディレクトリ形式パッケージを作成する方法

署名なしディレクトリ形式パッケージを作成する手順は、すでに説明した通常のパッケージの作成手順と同じです。次の手順では、この署名なしディレクトリ形式パッケージを作成するプロセスを説明します。詳細については、パッケージの構築に関する前のセクションを参照してください。

  1. pkginfo ファイルを作成します。

    pkginfo ファイルは、次の基本的な内容となるようにしてください。

    PKG=SUNWfoo
    BASEDIR=/
    NAME=My Test Package
    ARCH=sparc
    VERSION=1.0.0
    CATEGORY=application
  2. prototype ファイルを作成します。

    prototye ファイルは、次の基本的な内容となるようにしてください。

    $cat prototype
    i pkginfo
    d none usr 0755 root sys
    d none usr/bin 0755 root bin
    f none usr/bin/myapp=/tmp/myroot/usr/bin/myapp 0644 root bin
  3. オブジェクトソースディレクトリの内容を一覧表示します。

    例:

    $ ls -lR /tmp/myroot

    出力は次のような内容です。

    /tmp/myroot:
    total 16
    drwxr-xr-x   3 abc      other        177 Jun  2 16:19 usr
    
    /tmp/myroot/usr:
    total 16
    drwxr-xr-x   2 abc      other        179 Jun  2 16:19 bin
    
    /tmp/myroot/usr/bin:
    total 16
    -rw-------   1 abc      other       1024 Jun  2 16:19 myapp
  4. 署名なしパッケージを作成します。
    pkgmk -d `pwd`

    出力は次のような内容です。

    ## Building pkgmap from package prototype file.
    ## Processing pkginfo file.
    WARNING: parameter <PSTAMP> set to "syrinx20030605115507"
    WARNING: parameter <CLASSES> set to "none"
    ## Attempting to volumize 3 entries in pkgmap.
    part  1 -- 84 blocks, 7 entries
    ## Packaging one part.
    /tmp/SUNWfoo/pkgmap
    /tmp/SUNWfoo/pkginfo
    /tmp/SUNWfoo/reloc/usr/bin/myapp
    ## Validating control scripts.
    ## Packaging complete.

    現在のディレクトリにパッケージが存在するようになります。

証明書をパッケージキーストアにインポートする方法

インポートする証明書と非公開鍵は、PEM またはDER でエンコードされた X.509 である必要があります。さらに、署名する証明書を認証局証明書にリンクするいずれかの中間、つまり「チェーン」証明書も、パッケージに署名する前にパッケージキーストアにインポートする必要があります。


注 - 各認証局は、さまざまな形式で証明書を発行できます。PKCS12 ファイルから PEM エンコードされた X.509 ファイル (パッケージキーストアへのインポートに適したもの) に証明書と非公開鍵を抽出するには、OpenSSL などのフリーウェアの変換ユーティリティを使用します。


非公開鍵が暗号化されている場合 (通常の場合) は、パスフレーズの入力を求められます。また、生成されるパッケージキーストアを保護するためのパスワードの指定を求められます。パスワードを指定しないこともできますが、その場合は、生成されるパッケージキーストアは暗号化されません。

次の手順では、証明書が適切な形式になったあと、pkgadm コマンドを使用して証明書をインポートする方法について説明します。

  1. PEM または DER でエンコードされた X.509 証明書ファイルに含まれるすべての認証局証明書をインポートします。

    たとえば、ca.pem に含まれるすべての認証局証明書をインポートするには、次のように入力します。

    $ pkgadm addcert -k ~/mykeystore -ty ca.pem

    出力は次のような内容です。

    Trusting certificate <VeriSign Class 1 CA Individual \
    Subscriber-Persona Not Validated>
    Trusting certificate </C=US/O=VeriSign, Inc./OU=Class 1 Public \
    Primary Certification Authority
    Type a Keystore protection Password.
    Press ENTER for no protection password (not recommended): 
    For Verification: Type a Keystore protection Password.
    Press ENTER for no protection password (not recommended): 
    Certificate(s) from <ca.pem> are now trusted

    署名に使用する鍵をパッケージキーストアにインポートするには、あとでパッケージに署名するときに使用する別名を指定する必要があります。この別名は、パッケージキーストアから鍵を削除する場合にも使用できます。

    たとえば、署名鍵を sign.pem ファイルからインポートするには、次のように入力します。

    $ pkgadm addcert -k ~/mykeystore -n mycert sign.pem

    出力は次のような内容です。

    Enter PEM passphrase:
    Enter Keystore Password: 
    Successfully added Certificate <sign.pem> with alias <mycert>
  2. パッケージキーストアに証明書があることを確認します。

    たとえば、前の手順で作成したキーストア内の証明書を表示するには、次のように入力します。

    $ pkgadm listcert -k ~/mykeystore

パッケージに署名する方法

証明書をパッケージキーストアにインポートしたら、パッケージに署名できます。パッケージに実際に署名するには、pkgtrans コマンドを使用します。