X

Oracle Solaris, Oarcle ハードウェア製品に関する情報

  • Sun
    July 29, 2009

Solaris Cryptographic Framework を GlassFish から利用する方法

Guest Author

今回のブログでは、GlassFish アプリケーションサーバの HTTP(SSL)
リスナーにて、UltraSPARC T1/T2 Crypto Accelerator を利用する設定を
まとめます。

今回使用するアプリケーションサーバは、Sun GlassFish Enterprise Server v2.1

利用するバイナリは、Sun GlassFish Enterprise Server v2.1 with HADB for Solaris SPARC, Multi-language

sges_ee-2_1-solaris-sparc-ml.bin になります。

まずは、GlassFish のインストールを行いましょう。

  # ./sges_ee-2_1-solaris-sparc-ml.bin -console -savestate /var/tmp/sges_ee-savestate

コンソールログ

savestate ファイル

インストールが終了したら GlassFish を起動します。

  # /opt/SUNWappserver/bin/asadmin start-domain --user admin domain1

Solaris Cryptographic Framework (SCF) を構成する


Solaris Cryptographic Framework (SCF) ソフトウェアトークンには
非公開情報が含まれているため、pktool(1) コマンドを使用して
トークンにパスワードを設定します。
このコマンドは、アプリケーション所有者 (今回は、GlassFish を root
として実行するので、root ユーザ)
としてシステムにログインすることで、ユーザーのデフォルトキーストア
を初期化します。

SCF ソフトウェアトークンのピンを設定する手順


pktool setpin コマンドを実行すると、$HOME/.sunw/pkcs11_softtoken/
ディレクトリ内のソフトウェアトークンデータストアが初期化されます。
これらのファイルは、その内容を保護するために、所有者だけがアクセス
できるように作成されます。つまり、ユーザーが妥当なデータストアに
アクセスできるように、GlassFish を実行しているのと同じ root ユーザー
として初期化を実行する必要があります。

1. root ユーザーになります。

      # su - root

2. id コマンドを実行します。

      # id
uid=0(root) gid=0(root)

3. pktool コマンドを実行します。

      # pktool setpin
トークンパスフレーズを入力してください: <-- 既存のパスフレーズを入力 (デフォルトは changeme)
新しいパスフレーズを作成してください: <-- 新しいパスフレーズ
新しいパスフレーズを再入力してください: <-- 確認の為もう一度入力します
パスフレーズが変更されました。 <-- パスフレーズが変更されたというメッセージが表示されます
#

4. root のホームディレクトリ (/) に移動します。

      # cd /

5. アクセス権をチェックします。

      # ls -alrR .sunw
.sunw:
合計 9
drwx------ 4 root root 5 7月 27日 17:51 pkcs11_softtoken
drwxr-xr-x 25 root root 29 7月 27日 17:51 ..
drwx------ 3 root root 3 7月 27日 17:51 .
.sunw/pkcs11_softtoken:
合計 14
drwx------ 2 root root 2 7月 27日 17:51 public
drwx------ 2 root root 2 7月 27日 17:51 private
-rw------- 1 root root 103 7月 27日 17:51 objstore_info
drwx------ 3 root root 3 7月 27日 17:51 ..
drwx------ 4 root root 5 7月 27日 17:51 .
.sunw/pkcs11_softtoken/public:
合計 6
drwx------ 4 root root 5 7月 27日 17:51 ..
drwx------ 2 root root 2 7月 27日 17:51 .
.sunw/pkcs11_softtoken/private:
合計 6
drwx------ 4 root root 5 7月 27日 17:51 ..
drwx------ 2 root root 2 7月 27日 17:51 .
sw-90#

cryptoadm を使用して Solaris Cryptographic Framework を管理する手順


cryptoadm ユーティリティーは、システムの暗号化プロバイダ情報の表示、
各プロバイダに対する機構の構成、暗号化プロバイダのインストールまたは
アンインストールを行います。

Solaris Cryptographic Framework では、ユーザーレベルのプロバイダ
(PKCS#11 共有ライブラリ)、カーネルプロバイダ (ロード可能なカーネル
ソフトウェアモジュール)、カーネルハードウェアプロバイダ (暗号化ハード
ウェアデバイス) という 3 種類のプロバイダがサポートされます。

cryptoadm ユーティリティーには、メタスロットの機能を有効化または無効化
するサブコマンド、メタスロットの構成を表示するサブコマンド、
メタスロットの機構のポリシーを構成するサブコマンドがあります。

1. Solaris Cryptographic Framework のすべてのサービスプロバイダと、各プロバイダの暗号化機構を表示するには、cryptoadm list -m を実行します。暗号化プロバイダとして ncp と pkcs11_softtoken.so が利用できることを確認してください。NCP はカーネルプロバイダなので、出力リスト内で pkcs11_kernel.so は pkcs11_softtoken.so よりも前に表示されるはずです。

      # cryptoadm list -m
ユーザーレベルプロバイダ:
=====================
プロバイダ: /usr/lib/security/$ISA/pkcs11_kernel.so
メカニズム:
CKM_DSA
CKM_RSA_X_509
CKM_RSA_PKCS
CKM_RSA_PKCS_KEY_PAIR_GEN
CKM_DH_PKCS_KEY_PAIR_GEN
CKM_DH_PKCS_DERIVE
CKM_ECDSA_KEY_PAIR_GEN
CKM_ECDH1_DERIVE
CKM_ECDSA
プロバイダ: /usr/lib/security/$ISA/pkcs11_softtoken.so
メカニズム:
CKM_DES_CBC
CKM_DES_CBC_PAD
CKM_DES_ECB
CKM_DES_KEY_GEN
[.... 省略 ...]
CKM_DSA
CKM_DSA_SHA1
CKM_DSA_KEY_PAIR_GEN
[.... 省略 ...]
CKM_TLS_MASTER_KEY_DERIVE_DH
CKM_SSL3_KEY_AND_MAC_DERIVE
CKM_TLS_KEY_AND_MAC_DERIVE
CKM_TLS_PRF
カーネルソフトウェアプロバイダ:
==========================
swrand: メカニズムが表示されませんでした。
rsa: CKM_RSA_PKCS,CKM_RSA_X_509,CKM_MD5_RSA_PKCS,CKM_SHA1_RSA_PKCS,CKM_SHA256_RSA_PKCS,CKM_SHA384_RSA_PKCS,CKM_SHA512_RSA_PKCS
md5: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL
sha2: CKM_SHA256,CKM_SHA256_HMAC,CKM_SHA256_HMAC_GENERAL,CKM_SHA384,CKM_SHA384_HMAC,CKM_SHA384_HMAC_GENERAL,CKM_SHA512,CKM_SHA512_HMAC,CKM_SHA512_HMAC_GENERAL
sha1: CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL
blowfish448: CKM_BLOWFISH_ECB,CKM_BLOWFISH_CBC
arcfour2048: CKM_RC4
aes256: CKM_AES_ECB,CKM_AES_CBC,CKM_AES_CTR
des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC
カーネルハードウェアプロバイダ:
==========================
ncp/0: CKM_DSA,CKM_RSA_X_509,CKM_RSA_PKCS,CKM_RSA_PKCS_KEY_PAIR_GEN,CKM_DH_PKCS_KEY_PAIR_GEN,CKM_DH_PKCS_DERIVE,CKM_ECDSA_KEY_PAIR_GEN,CKM_ECDH1_DERIVE,CKM_ECDSA
sw-90#

2. 次のユーザーレベル機構を無効にして、その機構が NCP によって実行されるようにします。

      # cryptoadm disable provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so \\
mechanism=CKM_SSL3_PRE_MASTER_KEY_GEN,\\
CKM_SSL3_MASTER_KEY_DERIVE,CKM_SSL3_KEY_AND_MAC_DERIVE,CKM_SSL3_MASTER_KEY_DERIVE_DH,\\
CKM_SSL3_MD5_MAC,CKM_SSL3_SHA1_MAC

3.ユーザーレベル機構が無効になったことを確認します。

      # cryptoadm list -p provider=/usr/lib/security/'$ISA'/pkcs11_softtoken.so
/usr/lib/security/$ISA/pkcs11_softtoken.so: すべてのメカニズムが有効です,
except CKM_SSL3_SHA1_MAC,CKM_SSL3_MD5_MAC,CKM_SSL3_MASTER_KEY_DERIVE_DH,
CKM_SSL3_KEY_AND_MAC_DERIVE,CKM_SSL3_MASTER_KEY_DERIVE,
CKM_SSL3_PRE_MASTER_KEY_GEN. random が有効になっています。

SCF プロバイダを構成する手順


NSS では secmod.db を使用して、利用可能な PKCS#11 モジュールを管理します。NSS に付属の CLI のセキュリティーモジュール データベースツール modutil を使用すると、secmod.db ファイル内の PKCS#11 モジュール情報を管理することができます。このセキュリティーモジュールデータベースツールには、PKCS#11 モジュールの追加または削除、パスワードの変更、デフォルトの設定、モジュールの内容の表示、スロットの有効化または無効化などの機能があります。modutil CLI は Messaging Server ソフトウェアにバンドルされており、Messaging-Server-Root/sbin ディレクトリにあります。次の例では、Messaging-Server-Root/sbin ディレクトリから modutil を実行し、cert8.db、secmod.db、および key3.db が config ディレクトリ (Messaging-Server-Root/config) にあると想定します。

1. 利用可能なすべての PKCS#11 モジュールを一覧表示します。



modutil を使用すると、利用可能なすべての PKCS#11 モジュールを一覧表示できます。デフォルトでは、NSS には内部 PKCS#11 モジュールがあります。

      # cd /opt/SUNWappserver/domains/domain1/config
# /opt/SUNWappserver/lib/modutil -dbdir . -nocertdb -list
Using database directory ../config...
Listing of PKCS #11 Modules
-----------------------------------------------------------
1. NSS Internal PKCS #11 Module
slots: 2 slots attached
status: loaded
slot: NSS Internal Cryptographic Services
token: NSS Generic Crypto Services
slot: NSS User Private Key and Certificate Services
token: NSS Certificate DB
-----------------------------------------------------------

2. デフォルトの NSS ソフトウェアトークンの内容を表示します。

      # /opt/SUNWappserver/lib/certutil -L -d .
verisignclass1ca T,c,c
thawtepersonalpremiumca T,c,c
baltimorecodesigningca T,c,c
verisignclass2g2ca T,c,c
verisignclass3g3ca T,c,c
entrustglobalclientca T,c,c
entrustsslca T,c,c
verisignclass3g2ca T,c,c
thawtepremiumserverca T,c,c
entrust2048ca T,c,c
valicertclass2ca T,c,c
gtecybertrust5ca T,c,c
s1as u,u,u
equifaxsecureebusinessca1 T,c,c
verisignclass1g3ca T,c,c
godaddyclass2ca T,c,c
thawtepersonalbasicca T,c,c
verisignclass1g2ca T,c,c
verisignclass2g3ca T,c,c
equifaxsecureca T,c,c
entrustclientca T,c,c
verisignserverca T,c,c
geotrustglobalca T,c,c
equifaxsecureebusinessca2 T,c,c
verisignclass3ca T,c,c
verisignclass2ca T,c,c
gtecybertrustglobalca T,c,c
entrustgsslca T,c,c
thawtepersonalfreemailca T,c,c
thawteserverca T,c,c
baltimorecybertrustca T,c,c
starfieldclass2ca T,c,c
equifaxsecureglobalebusinessca1 T,c,c

Solaris Cryptographic Framework をサービスプロバイダとして追加する手順


Messaging Server は、NSS 組み込み型ソフトウェアトークンを暗号化に使用するように構成されています。NSS 組み込み型ソフトウェアトークンでは、PKCS#11 を使用して暗号にアクセスします。Solaris Cryptographic Framework のユーザーレベル暗号化フレームワークを使用するように、Messaging Server の構成を変更することができます。その方法は簡単で、/usr/lib/libpkcs11.so ライブラリにリンクして、PKCS#11 の機能に直接アクセスするだけです。つまり、Solaris Cryptographic Framework を PKCS#11 モジュールとして登録します。

1. PKCS#11 ライブラリ /usr/lib/libpkcs11.so を Messaging Server ソフトウェアに登録し、Sun Metaslot というスロットを有効にします。

      # ./modutil -dbdir ../config/ -nocertdb -add "Solaris Crypto Framework" -libfile
/usr/lib/libpkcs11.so -mechanisms RSA
WARNING: Performing this operation while the browser is running could cause corruption
of your security databases. If the browser is currently running,
you should exit browser before continuing this operation. Type 'q ' to abort,
or to continue:
Using database directory ../config...
Module "Solaris crypto Framework" added to database.

Sun Metaslot スロットを有効にする手順


1. 次の modutil コマンドを実行します。

      # ./modutil -dbdir ../config/ -nocertdb -disable "Solaris Crypto Framework"
WARNING: Performing this operation while the browser is running
could cause corruption of your security databases.
If the browser is currently running,
you should exit browser before continuing this operation.
Type 'q ' to abort, or to continue:
Using database directory ../config...
Slot "Sun Metaslot" disabled.
Slot "ncp/0 Crypto Accel Asym 1.0" disabled.

2. 次の modutil コマンドを実行します。

      # ./modutil -dbdir ../config/ -nocertdb -enable "Solaris Crypto Framework" -slot "Sun Metaslot"
WARNING: Performing this operation while the browser is running
could cause corruption of your security databases.
If the browser is currently running,
you should exit browser before continuing this operation.
Type 'q ' to abort, or to continue:
Using database directory ../config...
Slot "Sun Metaslot" enabled.

3. 次の modutil コマンドを実行し、Solaris Crypto Framework が正常に追加されたことを確認します。

      # ./modutil -dbdir ../config/ -nocertdb -list
Using database directory ../config...
Listing of PKCS #11 Modules
-----------------------------------------------------------
1. NSS Internal PKCS #11 Module
slots: 2 slots attached
status: loaded
slot: NSS Internal Cryptographic Services
token: NSS Generic Crypto Services
slot: NSS User Private Key and Certificate Services
token: NSS Certificate DB
2. Solaris Crypto Framework
library name: /usr/lib/libpkcs11.so
slots: 2 slots attached
status: loaded
slot: Sun Metaslot
token: Sun Metaslot
slot: ncp/0 Crypto Accel Asym 1.0
token: ncp/0 Crypto Accel Asym 1.0
-----------------------------------------------------------

NSS ソフトウェアトークンから証明書と鍵のペアをエクスポートする手順


1. SSL のリスナーとして設定されている http-listener-2 の Cert nickname を確認する

      # /opt/SUNWappserver/bin/asadmin get server.http-service.http-listener.http-listener-2.ssl.\\\*
管理ユーザー名を入力してください>admin
管理パスワードを入力してください>
server.http-service.http-listener.http-listener-2.ssl.cert-nickname = s1as
server.http-service.http-listener.http-listener-2.ssl.client-auth-enabled = false
server.http-service.http-listener.http-listener-2.ssl.ssl2-ciphers =
server.http-service.http-listener.http-listener-2.ssl.ssl2-enabled = false
server.http-service.http-listener.http-listener-2.ssl.ssl3-enabled = true
server.http-service.http-listener.http-listener-2.ssl.ssl3-tls-ciphers =
server.http-service.http-listener.http-listener-2.ssl.tls-enabled = true
server.http-service.http-listener.http-listener-2.ssl.tls-rollback-enabled = true
#

2. 次のコマンドを実行し、内部トークンに含まれる s1as の証明書を PKCS#12 形式のファイルにエクスポートします。

      # /opt/SUNWappserver/lib/pk12util -o /tmp/s1as -n s1as -d /opt/SUNWappserver/domains/domain1/config
Enter Password or Pin for "NSS Certificate DB": <-- GlassFish インストール時に指定したマスターパスワードを入力
Enter password for PKCS12 file: <-- 出力する PKCS#12 形式のファイルのパスワードを設定
Re-enter password: <-- 確認の為再度入力
pk12util: PKCS12 EXPORT SUCCESSFUL
sw-90#

証明書と鍵のペアを Sun Metaslot (SCF) にインポートする手順


1. 次の pk12util コマンドを実行します。

      # /opt/SUNWappserver/lib/pk12util -i /tmp/s1as -d /opt/SUNWappserver/domains/domain1/config -h "Sun Metaslot"
Enter Password or Pin for "Sun Metaslot": <-- pktool setpin にて入力したパスワードを入力
Enter password for PKCS12 file: <-- PKCS#12 形式のファイルのパスワードを入力
pk12util: PKCS12 IMPORT SUCCESSFUL

証明書と鍵のペアが正常にインポートされたことを確認する手順



この手順では、証明書と鍵のペアがトークンに正常にインポートされたことを確認します。

1. 次の certutil コマンドを実行します。

      # /opt/SUNWappserver/lib/certutil -L -d /opt/SUNWappserver/domains/domain1/config -h "Sun Metaslot"
Enter Password or Pin for "Sun Metaslot": <-- pktool setpin にて入力したパスワードを入力
Sun Metaslot:s1as u,u,u

2. 次の certutil コマンドを実行します。

      # /opt/SUNWappserver/lib/certutil -K -d /opt/SUNWappserver/domains/domain1/config -h "Sun Metaslot"
Enter Password or Pin for "Sun Metaslot": <-- pktool setpin にて入力したパスワードを入力<0> s1as

GlassFish から Solaris Crypto Framework を利用する為の手順


1. SSL のリスナーとして設定されている http-listener-2 の Cert nickname を Sun Metaslot 内にある s1as に変更

      # /opt/SUNWappserver/bin/asadmin set --user admin server.http-service.http-listener.http-listener-2.ssl.cert-nickname="Sun Metaslot:s1as"
管理パスワードを入力してください>
server.http-service.http-listener.http-listener-2.ssl.cert-nickname = Sun Metaslot:s1as
#

2. GlassFish を再起動

      # /opt/SUNWappserver/bin/asadmin stop-domain
ドメイン domain1 が停止しました。
# /opt/SUNWappserver/bin/asadmin start-domain --user admin domain1
ドメイン domain1 を起動しています。お待ちください。
Default Log location is /opt/SUNWappserver/domains/domain1/logs/server.log.
管理パスワードを入力してください>
マスターパスワードを入力してください>
NSS スロット Sun Metaslot のパスワードを入力してください>
出力を /opt/SUNWappserver/domains/domain1/logs/server.log にリダイレクトしています
ドメイン domain1 が起動しました。
ドメイン [domain1] はその設定で [Sun GlassFish Enterprise Server v2.1 (9.1.1) (build b60e-fcs)] を実行しています。ログは [/opt/SUNWappserver/domains] にあります。
管理コンソールは [https://localhost:4848] で使用できます。
"asadmin" コマンドにも同じポート [4848] を使用します。
ユーザーの Web アプリケーションは次の URL で使用できます:
[http://localhost:8080 https://localhost:8181 ]。
次の web-contexts を使用できます:
[/web1 /__wstx-services ]。
標準の JMX クライアント (JConsole など) はドメイン管理のために JMXServiceURL:
[service:jmx:rmi:///jndi/rmi://sw-90.japan.sun.com:8686/jmxrmi] に接続できます。
ドメインは少なくとも次のポートで接続を待機しています:
[8080 8181 4848 3700 3820 3920 8686 ]。
ドメインはアプリケーションサーバークラスタおよびその他のスタンドアロンインスタンスをサポートします。
sw-90#

Crypto Accelerator が正常に動作している事を確認する



1. 設定した HTTP リスナーのポート番号を確認する

      # //opt/SUNWappserver/bin/asadmin get server.http-service.http-listener.http-listene rr-2.\\\*
管理ユーザー名を入力してください>admin
管理パスワードを入力してください>
server.http-service.http-listener.http-listener-2.acceptor-threads = 1
server.http-service.http-listener.http-listener-2.address = 0.0.0.0
server.http-service.http-listener.http-listener-2.blocking-enabled = false
server.http-service.http-listener.http-listener-2.default-virtual-server = server
server.http-service.http-listener.http-listener-2.enabled = true
server.http-service.http-listener.http-listener-2.external-port =
server.http-service.http-listener.http-listener-2.family = inet
server.http-service.http-listener.http-listener-2.id = http-listener-2
server.http-service.http-listener.http-listener-2.port = 8181
server.http-service.http-listener.http-listener-2.redirect-port =
server.http-service.http-listener.http-listener-2.security-enabled = true
server.http-service.http-listener.http-listener-2.server-name =
server.http-service.http-listener.http-listener-2.xpowered-by = true
#

2. SSL アクセス前の利用状況を確認する

      # kstat -n ncp0 -s rsaprivate
module: ncp instance: 0
name: ncp0 class: misc
rsaprivate 1
#

3. https://sw-90.japan.sun.com:8181/ へアクセスする

4. SSL アクセス後、再度利用状況を確認する

※ rsaprivate の値が増えているので、正常に利用している事が確認できる

      # kstat -n ncp0 -s rsaprivate
module: ncp instance: 0
name: ncp0 class: misc
rsaprivate 2
#

参考情報



Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.