ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
アプリケーションパッケージ開発者ガイド Oracle Solaris 10 1/13 Information Library (日本語) |
署名付きパッケージを作成するプロセスには、複数の手順が含まれ、新しい概念と用語を理解する必要があります。このセクションでは、署名付きパッケージ、その用語、および証明書管理に関して説明します。このセクションでは、署名付きパッケージの作成手順についても説明します。
署名付きパッケージは、次のことを証明するデジタル署名 (次に定義する、PEM でエンコードされた PKCS7 デジタル署名) の付いた通常のストリーム形式のパッケージです。
そのパッケージに署名したエンティティーがそのパッケージの作成者である。
そのエンティティーが実際にそのパッケージに署名した。
そのパッケージがエンティティーによる署名後に変更されていない。
そのパッケージに署名したエンティティーが信頼されたエンティティーである。
署名付きパッケージは、署名が付いている点以外は、署名なしパッケージと同一です。署名付きパッケージと署名なしパッケージは、バイナリレベルで互換性があります。したがって、署名付きパッケージは古いバージョンのパッケージツールで使用できます。ただし、その場合、署名は無視されます。
署名付きパッケージ技術には新しい用語と省略名がいくつかあり、それについて次の表で説明します。
|
署名付きパッケージを作成するには、先にパッケージキーストアが存在している必要があります。このパッケージキーストアには、証明書がオブジェクトの形式で含まれます。パッケージキーストアには、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
この例では、次のオプションを使用しています。
|
pkgadm コマンドは、パッケージキーストアの内容の表示にも使用します。例:
$ pkgadm listcert
このコマンドは、パッケージキーストアに含まれる信頼できる証明書と非公開鍵を表示します。
pkgadm コマンドを使用すると、信頼できる証明書と非公開鍵をパッケージキーストアから削除できます。
ユーザー証明書を削除するときは、証明書と鍵のペアの別名を指定する必要があります。例:
$ pkgadm removecert -n myname
証明書の別名は証明書の共通名であり、pkgadm listcert コマンドを使用して識別できます。たとえば、次のコマンドは、Trusted CA Cert 1 という名前の信頼できる証明書を削除します。
$ pkgadm removecert -n "Trusted CA Cert 1"
注 - 信頼できる証明書とユーザー証明書を同じ別名で保存した場合は、-n オプションを指定するとどちらも削除されます。
署名付きパッケージ作成のプロセスは、3 つの基本手順から成ります。
署名なしディレクトリ形式パッケージの作成。
署名証明書、CA 証明書、および非公開鍵のパッケージキーストアへのインポート。
手順 2 の証明書による手順 1 のパッケージへの署名。
注 - パッケージツールでは証明書は作成されません。これらの証明書は、Verisign や Thawte などの認証局から入手する必要があります。
次に、署名付きパッケージ作成の各手順について説明します。
署名なしディレクトリ形式パッケージを作成する手順は、すでに説明した通常のパッケージの作成手順と同じです。次の手順では、この署名なしディレクトリ形式パッケージを作成するプロセスを説明します。詳細については、パッケージの構築に関する前のセクションを参照してください。
pkginfo ファイルは、次の基本的な内容となるようにしてください。
PKG=SUNWfoo BASEDIR=/ NAME=My Test Package ARCH=sparc VERSION=1.0.0 CATEGORY=application
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
例:
$ 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
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 コマンドを使用して証明書をインポートする方法について説明します。
たとえば、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>
たとえば、前の手順で作成したキーストア内の証明書を表示するには、次のように入力します。
$ pkgadm listcert -k ~/mykeystore
証明書をパッケージキーストアにインポートしたら、パッケージに署名できます。パッケージに実際に署名するには、pkgtrans コマンドを使用します。
たとえば、前の手順の例を使用すると、SUNWfoo.signed という名前の署名付きパッケージを作成するには、次のように入力します。
$ pkgtrans -g -k ~/mykeystore -n mycert . ./SUNWfoo.signed SUNWfoo
このコマンドの出力は、次のような内容です。
Retrieving signing certificates from keystore </home/user/mykeystore> Enter keystore password: Generating digital signature for signer <Test User> Transferring <SUNWfoot> package instance
署名付きパッケージは、SUNWfoo.signed ファイルにパッケージストリーム形式で作成されます。この署名付きパッケージは、Web サイトにコピーし、pkgadd コマンドと URL を使用してインストールするのに適しています。