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)
|