水曜日 7 29, 2009

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

今回のブログでは、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

      #

参考情報

About

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日