トップページ > インストール関連 > Solaris10で署名付きパッケージの作成とインストール
カテゴリー
オラクルエンジニア通信
サポートページ
マニュアルページ
ソフトウェアダウンロード
中古UNIXマシン購入
blogs.sun.com
お勧めサイト
プライベートリンク

Solaris10で署名付きパッケージの作成とインストール

Solaris 10 1/06 環境で署名付きパッケージの作成方法と、そのためのキーストアの作成を行ってみる。
ここでは署名付きパッケージのための trusted キーを作成するために openssl コマンドを使用する。
openssl コマンドは Solaris 10 では標準で /usr/sfw/bin にインストールされている。

今回は、動作検証なのでベリサインのような信頼された認証局(CA)の証明書ではなく、自己署名の証明書を使用して行う。

■ パッケージキーストアの作成

以下のように /keys ディレクトリを作成し、鍵類は全てここに格納する。
システムのデフォルトキーストアの格納場所は /var/sadm/security ディレクトリなので、キーストアの指定などを省略したいときはこち らにしておく方が便利だが、今回は自己署名の暫定的なものなので、別ディレクトリに格納する。

bash-3.00# mkdir /keys
bash-3.00# cd /keys
bash-3.00# /usr/sfw/bin/openssl genrsa -aes128 -out package-key.pem 1024
Generating RSA private key, 1024 bit long modulus
........++++++
...............................++++++
e is 65537 (0x10001)
Enter pass phrase for package-key.pem: solaris   <-- 秘密鍵を保護するパスフレーズの入力
Verifying - Enter pass phrase for package-key.pem: solaris <-- もう一度

上記コマンドで作成された鍵の中身は以下のようになっている。

bash-3.00# cat package-key.pem
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,2D07BF0A5E1FF82174491A91087E6DF0

H1txKItCMx2JJ9A9PjIL1sigevkfS0GDjJ8bWP9+CzGRtd+Dxp+Vv5a9EPBzmx2I
/EXgfWdQr7Ghke94XLEAOlbvh+OelNrnw19qsTLxLVGgF8g8FSeM0+oksz435RHT
+0MEm3ict3rQkiwXlQwxWwYbSQt/pJ6GBaVi4qAUyjJrL3JiNyV8Kb3C5LovQ11z
lwJk/j5GHvu9T23DkB2NyzU4vxB6T3NVCUc9P3ooHiYJlwAl9IKQfa9UA0Uu97J8
zCGwwIvpxbOpXjSMGFApDFH7V9Dn4EeVOAqm3IYuFWze/pEoQ0eo8xc5IiCQ7vis
SiwahzYQEuJVSTIYdgqiHNtsnlyA72mGSgXw/jfzLgE7ndcKu66swVKPKQ+onLkf
JAMELUlf1DFyD6h7ZFv2LZkVzE01xA0zqrveu99BSADLrCvZmuu+yZrb65/Je/xY
d5jVBQkd41j/XahQJLM/oTyiNe5zCTtPRKOkHDOIhgyPV5YiGtIUc1Ta7KnjqXpe
EPpy4o2Ao/kCk+PuX+Yzy9z4XxlBuTr6T3b++SsiSGkZfALLQps3K50U87eD/Osw
fTcx91nNtVR1fpUNhuFxVt2nCHBje9keF+BDZ3o13q7TIleF1znLkbT6mTxE/jAn
FqT63IIe5EC7z6RTbSY0JNyvLRhmFMDRsX1suxQXZQp5K8oVSQ8nHz/CklZDsHNg
ywQ1OfSwpG6nfDocd1nCCgL0so8uE1cb3kgmLLwUuXH7GcvlAq8gfTaXJGYSmSOz
UFwdTbgoAyzybD3Otmk+CaRp5aP/+Q33KZdoMpF46UPuSt3wXKvjaLo1tVIMh8uE
-----END RSA PRIVATE KEY-----


次に、上記手順で作成したパッケージ署名キーから証明書署名要求(CSR)を作成する。

bash-3.00# /usr/sfw/bin/openssl req -new -key package-key.pem -out package-key.pem.csr
Enter pass phrase for package-key.pem: solaris
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shinagawa
Organization Name (eg, company) [Unconfigured OpenSSL Installation]:
Organizational Unit Name (eg, section) []:Solaris 10 test
Common Name (eg, YOUR name) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

ちなみに上記手順で作成したCSRの中身はこんな感じ。

bash-3.00# cat package-key.pem.csr
-----BEGIN CERTIFICATE REQUEST-----
MIIBtzCCASACAQAwdzELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBVRva3lvMRIwEAYD
VQQHEwlTaGluYWdhd2ExKjAoBgNVBAoTIVVuY29uZmlndXJlZCBPcGVuU1NMIElu
c3RhbGxhdGlvbjEYMBYGA1UECxMPU29sYXJpcyAxMCB0ZXN0MIGfMA0GCSqGSIb3
DQEBAQUAA4GNADCBiQKBgQDR87dDL/IsyY0oNQRNkfhLDWCqUNhzk0+hMuHYK1uz
UI1ftLXk0EZKG9TPf1AH4KDOPWrmogctFlhU2hkqhN6hnnknmAoi2px2XH/gK4QA
WR9CbdM8s6jcH7b3nl6cGaoW++hHat8fzk7lcX1XOjmnX0h0/gBsLjRD5Q6cP/bY
dQIDAQABoAAwDQYJKoZIhvcNAQEEBQADgYEArJAMe/mhyrh31HUSHSX0vlX6Ahq3
B3G5PvcCJ31se1wB5T3OK3OV5FAm6QSY+CxWoO7Z6EMlSss4FKYBdG5KXlhiakCi
ddExns9KWe6gvND3gLnJzNYQ//hhQjXrMQ0GNQcuyBSqW5FCm4Cx8JyGginQKNUl
pvqdIbZm+L+3/9U=
-----END CERTIFICATE REQUEST-----


パッケージ署名キーに自己署名する。通常は信頼された認証局(CA)によって署名される。

bash-3.00# /usr/sfw/bin/openssl req -in package-key.pem.csr -out package-key-public.pem -key package-key.pem -x509 -days 365
Enter pass phrase for package-key.pem: solaris

上記手順で作成された証明書の中身は以下のようになります。

bash-3.00# cat package-key-public.pem
-----BEGIN CERTIFICATE-----
MIIDOTCCAqKgAwIBAgIBADANBgkqhkiG9w0BAQQFADB3MQswCQYDVQQGEwJKUDEO
MAwGA1UECBMFVG9reW8xEjAQBgNVBAcTCVNoaW5hZ2F3YTEqMCgGA1UEChMhVW5j
b25maWd1cmVkIE9wZW5TU0wgSW5zdGFsbGF0aW9uMRgwFgYDVQQLEw9Tb2xhcmlz
IDEwIHRlc3QwHhcNMDYwMzA4MDYwNzA0WhcNMDcwMzA4MDYwNzA0WjB3MQswCQYD
VQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEjAQBgNVBAcTCVNoaW5hZ2F3YTEqMCgG
A1UEChMhVW5jb25maWd1cmVkIE9wZW5TU0wgSW5zdGFsbGF0aW9uMRgwFgYDVQQL
Ew9Tb2xhcmlzIDEwIHRlc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANHz
t0Mv8izJjSg1BE2R+EsNYKpQ2HOTT6Ey4dgrW7NQjV+0teTQRkob1M9/UAfgoM49
auaiBy0WWFTaGSqE3qGeeSeYCiLanHZcf+ArhABZH0Jt0zyzqNwftveeXpwZqhb7
6Edq3x/OTuVxfVc6OadfSHT+AGwuNEPlDpw/9th1AgMBAAGjgdQwgdEwHQYDVR0O
BBYEFImkHP2F5nguKGS/bNSE+dELpOj+MIGhBgNVHSMEgZkwgZaAFImkHP2F5ngu
KGS/bNSE+dELpOj+oXukeTB3MQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8x
EjAQBgNVBAcTCVNoaW5hZ2F3YTEqMCgGA1UEChMhVW5jb25maWd1cmVkIE9wZW5T
U0wgSW5zdGFsbGF0aW9uMRgwFgYDVQQLEw9Tb2xhcmlzIDEwIHRlc3SCAQAwDAYD
VR0TBAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQBT2c3zvGAZTIlrEmPcwZKRyFKn
R5g/Kn4cIJfIMET6MpUIAM+gSJ9hjw+0MK9OhYB9tYpTZSNBs7FNWnDD8dMMULgZ
IZzALoZg9gszRfcNPyrsS9xoxcxWDAqZgwzx/KPqVU3aYhAdaEknoW+uduUuWQhv
puHF0Ff4r73kAtKKqg==
-----END CERTIFICATE-----


上記の信頼される証明書(trusted certificate)をパッケージキーストア /keys/pkgkeys にインポートする。
ここで -k でパッケージキーストアを明示しなければデフォルトの /var/sadm/security ディレクトリに truststore という名前で保存される。

bash-3.00# pkgadm addcert -k /keys/pkgkeys -t package-key-public.pem
    Keystore Alias: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
       Common Name: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
  Certificate Type: Trusted Certificate
Issuer Common Name: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
    Validity Dates: <Mar  8 06:07:04 2006 GMT> - <Mar  8 06:07:04 2007 GMT>
   MD5 Fingerprint: AB:03:A8:EC:1A:7E:A0:B3:6C:6C:17:BB:A0:0E:D1:09
  SHA1 Fingerprint: 93:78:14:82:9E:39:E5:51:BC:44:55:4B:E8:DD:B7:F8:57:ED:A7:7C

本当にこの証明書を信頼しますか? y
証明書 </C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te> を信頼します
キーストアの保護パスワードを入力してください。
保護パスワードがない場合は ENTER を押してください (推奨されません): solaris10
For Verification: キーストアの保護パスワードを入力してください。
保護パスワードがない場合は ENTER を押してください (推奨されません): solaris10
<package-key-public.pem> からの証明書が信頼されるようになりました


次に、すべてのパッケージに署名する際に使用する実際のキーをパッケージキーストアにインポートする。

bash-3.00# pkgadm addcert -k /keys/pkgkeys -n signer -e package-key.pem package-key-public.pem
PEM パスフレーズを入力してください: solaris
キーストアのパスワードを入力してください: solaris10
別名 <signer> を持つ証明書 <package-key-public.pem> の追加が成功しました

以下にキーストア内の全てのキー/証明書を表示する。
最初のエントリである"Signing Certificate" は実際にパッケージに署名するために使われ、2つ目の "Trusted Certificate" は "Signing Certificate" に署名するために使われた証明書である。
というわけで、両方ともキーストアにインポートされている必要がある。

bash-3.00# pkgadm listcert -k /keys/pkgkeys
キーストアのパスワードを入力してください: solaris10
    Keystore Alias: signer
       Common Name: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
  Certificate Type: Signing Certificate
Issuer Common Name: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
    Validity Dates: <Mar  8 06:07:04 2006 GMT> - <Mar  8 06:07:04 2007 GMT>
   MD5 Fingerprint: AB:03:A8:EC:1A:7E:A0:B3:6C:6C:17:BB:A0:0E:D1:09
  SHA1 Fingerprint: 93:78:14:82:9E:39:E5:51:BC:44:55:4B:E8:DD:B7:F8:57:ED:A7:7C

    Keystore Alias: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
       Common Name: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
  Certificate Type: Trusted Certificate
Issuer Common Name: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
    Validity Dates: <Mar  8 06:07:04 2006 GMT> - <Mar  8 06:07:04 2007 GMT>
   MD5 Fingerprint: AB:03:A8:EC:1A:7E:A0:B3:6C:6C:17:BB:A0:0E:D1:09
  SHA1 Fingerprint: 93:78:14:82:9E:39:E5:51:BC:44:55:4B:E8:DD:B7:F8:57:ED:A7:7C


無事、パッケージキーストアの作成も終わったので、さっそくパッケージに署名してみる。


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

署名に使用するパッケージは Sunfreeware.com からダウンロードしてきた lsof-4.74 にしてみる。
ちなみに署名が可能なのはディレクトリフォーマットになっているものだけなので、まずはpkgtrans コマンドでストリームフォーマットからディレクトリフォーマットへ変換をしている。

bash-3.00# cd /var/tmp
bash-3.00# file lsof-4.74-sol10-sparc-local
lsof-4.74-sol10-sparc-local:    パッケージのデータストリーム
bash-3.00# pkgtrans ./lsof-4.74-sol10-sparc-local . SMClsof
Transferring <SMClsof> package instance
bash-3.00# file SMClsof
SMClsof:        ディレクトリ
bash-3.00# ls SMClsof
pkginfo  pkgmap   reloc

次に以下のようにパッケージに署名をし、元のストリームフォーマットに戻す。

bash-3.00# pkgtrans -sg -k /keys/pkgkeys . lsof-signed.pkg SMClsof
    キーストア </keys/pkgkeys> から署名証明書を検索中です
キーストアのパスワードを入力してください: solaris10
Generating digital signature for signer </C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te>
Transferring <SMClsof> package instance

上記手順で署名付きパッケージ lsof-signed.pkg が作成された。


■ 署名付きパッケージのインストール

以下のように pkgadd コマンドに -k オプションを使用し、パッケージキーストア /keys/pkgkeys を指定する。

bash-3.00# pkgadd -d lsof-signed.pkg -k /keys/pkgkeys

The following packages are available:
  1  SMClsof     lsof
                 (sparc) 4.74

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:
キーストアのパスワードを入力してください:
## Verifying signature for signer </C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te>
## Signature for signer </C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te> verified.

</var/tmp/lsof-signed.pkg> 中のパッケージインスタンス <SMClsof> を処理中です。

lsof(sparc) 4.74
Vic Abell

選択されたベースディレクトリ </usr/local> は、インストール 前に存在し
ている必要があります。

今このディレクトリを作成しますか [y,n,?,q] y
</usr/local> をパッケージのベースディレクトリとして使用します。
## パッケージ情報を処理中です。
## システム情報を処理中です。
## ディスク領域の要件を確認中です。
## すでにインストール済みのパッケージとの重複を確認中です。
## setuid/setgid を行うプログラムを検査中です。

次のファイルは setuid、setgid、またはその両方のアクセス権でインストー
ルされます。
 /usr/local/bin/lsof <setgid sys>

これらのファイルを setuid または setgid ファイルとしてインストールしますか
 [y,n,?,q] y

lsof を <SMClsof> としてインストール中です。

## 1/1 部分をインストールしています。
/usr/local/bin/lsof
/usr/local/doc/lsof/00.README.FIRST
/usr/local/doc/lsof/00CREDITS
/usr/local/doc/lsof/00DCACHE
/usr/local/doc/lsof/00DIALECTS
/usr/local/doc/lsof/00DIST
/usr/local/doc/lsof/00FAQ
/usr/local/doc/lsof/00LSOF-L
/usr/local/doc/lsof/00MANIFEST
/usr/local/doc/lsof/00PORTING
/usr/local/doc/lsof/00QUICKSTART
/usr/local/doc/lsof/00README
/usr/local/doc/lsof/00TEST
/usr/local/doc/lsof/00XCONFIG
/usr/local/doc/lsof/lsof.man
/usr/local/man/man8/lsof.8
[ クラス <none> を検査しています ]

<SMClsof> のインストールに成功しました。


■ デフォルトのキーストア保存先 /var/sadm/security ディレクトリの利用

ちなみに、下記のようにデフォルトの保存先にキーストアを作成すると、pkgadd でキーストアの指定が不要になる。

bash-3.00# pkgadm addcert -t package-key-public.pem
    Keystore Alias: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
       Common Name: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
  Certificate Type: Trusted Certificate
Issuer Common Name: /C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te
    Validity Dates: <Mar  8 06:07:04 2006 GMT> - <Mar  8 06:07:04 2007 GMT>
   MD5 Fingerprint: AB:03:A8:EC:1A:7E:A0:B3:6C:6C:17:BB:A0:0E:D1:09
  SHA1 Fingerprint: 93:78:14:82:9E:39:E5:51:BC:44:55:4B:E8:DD:B7:F8:57:ED:A7:7C

本当にこの証明書を信頼しますか?y
証明書 </C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te> を信頼します
キーストアの保護パスワードを入力してください。
保護パスワードがない場合は ENTER を押してください (推奨されません): solaris10
For Verification: キーストアの保護パスワードを入力してください。
保護パスワードがない場合は ENTER を押してください (推奨されません): solaris10
<package-key-public.pem> からの証明書が信頼されるようになりました

bash-3.00# pkgadm addcert -n signer -e package-key.pem package-key-public.pem
PEM パスフレーズを入力してください: solaris
キーストアのパスワードを入力してください: solaris10
別名 <signer> を持つ証明書 <package-key-public.pem> の追加が成功しました

bash-3.00# ls -l /var/sadm/security/
合計 10
-rw-------   1 root     root        1072  3月  8日  15:55 certstore
-rw-------   1 root     root         842  3月  8日  15:55 keystore
-rw-------   1 root     root        1224  3月  8日  15:55 truststore

bash-3.00# pkgadd -d lsof-signed.pkg

The following packages are available:
  1  SMClsof     lsof
                 (sparc) 4.74

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:
キーストアのパスワードを入力してください: solaris10
## Verifying signature for signer </C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te>
## Signature for signer </C=JP/ST=Tokyo/L=Shinagawa/O=Unconfigured OpenSSL Installation/OU=Solaris 10 te> verified.

</var/tmp/lsof-signed.pkg> 中のパッケージインスタンス <SMClsof> を処理中です。
...
...

オラクルユニバーシティSolaris系技術トレーニング一覧

Solarisお勧め書籍

Solaris 11.2 システムハンドブック
Oracle Solaris 11 試験対策本(OCA)