BigAdmin System Administration Portal
特集記事: UltraSPARC T1 プロセッサ搭載のシステム上での Sun Java System Messaging Server 6.3 および Solaris Cryptographic Framework の構成
Print-friendly VersionPrint-friendly Version

UltraSPARC T1 プロセッサ搭載のシステム上での Sun Java System Messaging Server 6.3 および Solaris Cryptographic Framework の構成

Durga Tirunagari、2006 年 12 月

この記事では、SSL および Solaris Cryptographic Framework (SCF) で UltraSPARC T1 プロセッサの Cryptographic Accelerator を使用できるように、Sun Java System Messaging Server 6.3 を構成する方法を説明します。この処理は、SSL 用の Messaging Server の構成 (省略可能)、Solaris Cryptographic Framework (SCF) の構成、および SCF 使用のための Messaging Server の構成、という 3 つのステップからなります。


この記事で取り扱うコンポーネントの説明

ここでは、この記事で取り扱うコンポーネントを説明します。

Sun Java System Messaging Server の概要

Sun Java System Messaging Server は高性能で安全性の高いメッセージングプラットフォームです。数千人から数百万人のユーザーまでのスケーラビリティを持つ Messaging Server は、電子メールサーバーの統合や通信インフラストラクチャーの総所有コストの削減を目指す企業やサービスプロバイダに適しています。また、この Messaging Server には、ユーザー認証やセッション暗号化を使用して通信の安全性を確保する豊富なセキュリティー機能と、スパムやウィルスの防止に役立つ強力なコンテンツフィルタリング機能があります。セキュリティーはメッセージングサーバーの非常に重要な側面です。メッセージングサーバーと他の通信関連製品の詳細は、http://www.sun.com/bigadmin/hubs/comms を参照してください。

Solaris Cryptographic Framework の概要

Solaris Cryptographic Framework (SCF) には、暗号化要件に対処するための汎用的な PKCS#11 ライブラリとアルゴリズムが格納されています。PKCS#11 ライブラリは、RSA Security Inc. が策定した暗号化規格、PKCS#11 Cryptographic Token Interface (Cryptoki) に基づいて実装されています。詳細は、『Solaris Security for Developers Guide』の「Chapter 8, Introduction to the Solaris Cryptographic Framework」および参考資料を参照してください。Solaris Cryptographic Framework は、Solaris 10 オペレーティングシステムと Solaris Express リリースで利用できます。

暗号化モジュールまたは暗号化サービスプロバイダとも呼ばれる PKCS#11 モジュールでは、PKCS#11 インタフェースを使用して、暗号化や復号化などの暗号化サービスが行われます。PKCS#11 モジュールは、ソフトウェアまたはハードウェアに実装できる暗号化デバイス用のドライバと考えられます。PKCS#11 モジュールには常に 1 つ以上のスロットがあります。これらのスロットは、スマートカードなど、なんらかの物理的なリーダーに物理的なハードウェア上のスロットとして実装されるか、またはソフトウェアの概念スロットとして実装されます。PKCS#11 モジュールの各スロットには 1 つのトークンがあります。トークンは暗号化サービスを実際に提供するハードウェアデバイスまたはソフトウェアデバイスです。また、トークンには、証明書と鍵を保存することもできます。ハードウェアトークンは、PKCS#11 トークンのうち、ハードウェアアクセラレータやスマートカードなどの物理デバイスに実装されるものです。ソフトウェアトークンは、PKCS#11 トークンのうち、ソフトウェアのみに実装されるものです。

Messaging Server は、NSS 組み込み型ソフトウェアトークンを暗号化に使用するように構成されています。PKCS#11 をサポートするすべての PKCS#11 モジュールは NSS ライブラリと連携できるため、Solaris Cryptographic Framework を Messaging Server 用の暗号化サービスプロバイダとして使用できます。

UltraSPARC T1 プロセッサの概要

非対称暗号化は一般的に公開鍵基盤 (PKI) 暗号化とも呼ばれます。PKI 暗号化では対称暗号化と比較して最高 1000 倍の CPU 処理能力を発揮します。RSA (Rivest、Shamir、Adelman) アルゴリズムでは、モジュラー演算を使用して、公開鍵と非公開鍵の概念を実現します。通常、公開鍵暗号化を使用する RSA 演算のみがハードウェアアクセラレータにロードされます。つまり、非対称暗号化演算はアクセラレータカードによって実行され、対称暗号化演算はサーバーのメインプロセッサによって実行されます。

RSA 演算は SSL フルハンドシェークの重要な要素です。UltraSPARC T1 プロセッサの各コアには、RSA 演算と DSA 演算をサポートする MAU (モジュラー演算ユニット) があります。RSA 演算では、MAU にロードされる演算集約型アルゴリズムが利用されます。MAU は 1 秒あたり 14000 回の RSA 演算を実行できます。RSA 演算を MAU に移動すると、フルハンドシェークが高速化されて CPU が解放されます。MAU は、Solaris Cryptographic Framework ではサービスプロバイダ (ncp(7D)-Niagara Crypto Provider デバイスドライバ) として実装されています。ハードウェアアクセラレータによって、パフォーマンスが大幅に向上します。


構成概要

UltraSPARC T1 プロセッサの Sun Cryptographic Accelerator を使用できるように Messaging Server を構成する作業の概要は、次のとおりです。

  1. SSL 用に Messaging Server を構成する
  2. SSL 用に個々の Messaging Server プロセス (サーバー) を構成する
  3. Messaging Server 用に Solaris Cryptographic Framework (SCF) を構成する
  4. 外部トークンを使用するように Messaging Server を構成する
  5. Messaging Server サービスを起動する
  6. SCF の動作状態を確認する

SSL 用に Messaging Server を構成する

ここでは、secmodkey3、および cert8 の各データベースの作成、証明書の取得、NSS 組み込み型ソフトウェアトークン用の証明書のインストールに必要な手順を説明します。これらの手順を実行すると、配備した Messaging Server 上で SSL を使用できるようになります。

Messaging Server がすでに SSL 用に構成されている場合は、このセクションをスキップして、「SSL 用に個々の Messaging Server プロセス (サーバー) を構成する」に進んでください。


msgcert コマンドについて

msgcert コマンドは、証明書を管理するための主要な手段です。このコマンドには、証明書要求を作成する機能、証明書データベースに証明書を追加する機能、証明書データベース内の証明書を一覧表示する機能などがあります。Messaging Server の他のコマンドと同様に、msgcert コマンドは mailsrv のアカウントで実行されます。したがって、msgcert は、root のアカウントで実行した場合でも、Messaging Server ユーザーのアカウントで実行されます。msgcert コマンドは Messaging-Server-Root/sbin ディレクトリにあります。Messaging-Server-Root は Messaging Server をインストールしたディレクトリで、デフォルトは /opt/SUNWmsgsr です。

msgcert コマンドに関する詳細情報を参照するには、次のように入力します。

Messaging-Server-Root/sbin/msgcert --help

証明書データベースを作成して証明書と鍵のペアを追加する手順

証明書データベース (secmodkey3、および cert8) を作成し、sslpassword.conf ファイルを生成するには、次の手順を実行します。デフォルトでは、Messaging-Server-Root/config ディレクトリに証明書データベースが作成されます。

証明書データベース用に別のディレクトリとプレフィックスを指定するには、構成パラメータ local.ssldbprefix を使用します。

mailsrv などの Messaging Server ユーザーが、local.ssldbpath に対する書き込みと読み取りを行えるようにしておく必要があります。

  1. ディレクトリを Messaging Server sbin ディレクトリに変更します。
    cd Messaging-Server-Root/sbin

  2. 次のコマンドを実行します。
    ./msgcert generate-certDB

    このコマンドを実行すると、証明書データベース内の証明書と鍵を保護するためパスワードを入力するよう要求されます。

  3. 証明書データベースのパスワードを入力します。(パスワードは画面には表示されません。)
  4. 確認のため、証明書データベースのパスワードを再入力します。(パスワードは画面には表示されません。)
  5. 必要な証明書データベースと sslpassword.conf ファイルが作成されたことを確認します。
    # ls -lrt ../config/*.db ../config/sslpassword.conf
    -rw-------   1 mailsrv  mail       32768 Nov 16 04:40 ../config/secmod.db
    -rw-------   1 mailsrv  mail       65536 Nov 16 04:40 ../config/cert8.db
    -rw-------   1 mailsrv  mail       32768 Nov 16 04:40 ../config/key3.db
    -rw-r-----   1 mailsrv  mail          36 Nov 16 04:40 ../config/sslpassword.conf
    
    # cat ../config/sslpassword.conf
    Internal (Software) Token:12345678

証明書の取得手順

デフォルトでは、ニックネームが Server-Cert である自己署名付き証明書msgcert コマンドによって作成されます。デフォルトの自己署名付き証明書はそのまま使用しても削除してもどちらでもかまいません。

デフォルトの自己署名付き証明書を削除する方法を次の例に示します。

./msgcert remove-cert -W Messaging-Server-Root/config/sslpassword Server-Cert

  1. CA 署名のサーバー証明書を要求します。

    msgcert request-cert コマンドに対して、cert 要求を ASCII 形式として指定します (デフォルトはバイナリ形式)。これにより、PEM (Privacy Enhanced Mail) 形式の PKCS#10 証明書要求が作成されます。PEM は RFC 1421~1424 (RFC 1421) で指定された形式で、Base64 で符号化された証明書要求を US-ASCII 文字で表現するために使用されます。

    次に例を示します。

    # echo "12345678" > Messaging-Server-Root/config/sslpassword

    注: 証明書データベースの作成に使用したパスワードと同じパスワードです。

    # ./msgcert request-cert  -W Messaging-Server-Root/config/sslpassword
    --name "foobar.siroe.com" --org "Development" --org-unit "Comms" --city
    Santaclara --state California --country us -F ascii -o /tmp/MyCertRequest

    証明書署名要求 (Certificate Signing Request、CSR) の内容は次のようになります。

    # cat /tmp/MyCertRequest
    
    -----BEGIN NEW CERTIFICATE REQUEST-----
    MIIBvzCCASgCAQAwfzELMAkGA1UEBhMCdXMxEzARBgNVBAgTCkNhbGlmb3JuaWEx
    EzARBgNVBAcTClNhbnRhY2xhcmExDjAMBgNVBAsTBWNvbW1zMRQwEgYDVQQKEwtE
    ZXZlbG9wbWVudDEgMB4GA1UEAxMXYmlvdGl0ZS5yZWQuaXBsYW5ldC5jb20wgZ8w
    DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALFCDfmu1uYFy3DtHAo/kJUFqXF6utq2
    ga+Tow2PNEyuX+70SqyZ0vFwiL8di9b1mLMHLp3WBDPmXjVfNkANHk6Q38RlfyzT
    7iYpvhi6+4OVthzC65FaqwnEEiodZ7z7yx8vRhj4lVxeoNJpJexGr1MHuYr8tobe
    ljgEmrLP17aNAgMBAAGgADANBgkqhkiG9w0BAQQFAAOBgQANzqjEwcnnmdXjo/KH
    buolHi1hNEYoDsXWIlTi78xkH+7gtfCPkymFzTy5mS58PzAqyWm81MZKXj39C+Eq
    DOCJmZYRt3lG6wo0M8nMoQLHsVSHfGZxOyppupzYsmVfszhczr0EEHJP66itDPW2
    /jHGRbhXfeJNhKsisscd/YYkEQ==
    -----END NEW CERTIFICATE REQUEST-----

  2. 認証局 (CA) の規定する手順に従い、CSR を CA に送信します。

    CA 署名の証明書を取得する手順は、使用する CA に応じて異なります。たとえば、一部の商用 CA は、証明書を自動的にダウンロードするための Web サイトを提供しています。他の CA はリクエストベースで証明書を電子メールで送信します。CSR を CA に送信したあと、CA から証明書が返送されてくるのを待ってください。

  3. CA から受け取った証明書を保存します。

    証明書のバックアップを安全な場所に保存してください。証明書を紛失した場合は、バックアップファイルを使用して証明書を再インストールすることができます。証明書はテキストファイルとして保存できます。PEM 形式の PKCS#11 証明書は次のようになります。

    -----BEGIN CERTIFICATE-----
    MIIDmTCCAwKgAwIBAgIBZjANBgkqhkiG9w0BAQQFADCBhjELMAkGA1UEBhMCVVMx
    EzARBgNVBAgTCkNhbGlmb3JuaWExDzANBgNVBAoTBlNTRS1TVzEPMA0GA1UECxMG
    UG9ydGFsMRgwFgYDVQQDEw9WZWVyYSBOYXRhcmFqYW4xJjAkBgkqhkiG9w0BCQEW
    F3ZlZXJhLm5hdGFyYWphbkBzdW4uY29tMB4XDTA2MTExNjA3MDIyN1oXDTA3MTEx
    NjA3MDIyN1owfzELMAkGA1UEBhMCdXMxEzARBgNVBAgTCkNhbGlmb3JuaWExEzAR
    BgNVBAcTClNhbnRhY2xhcmExFDASBgNVBAoTC0RldmVsb3BtZW50MQ4wDAYDVQQL
    EwVjb21tczEgMB4GA1UEAxMXYmlvdGl0ZS5yZWQuaXBsYW5ldC5jb20wgZ8wDQYJ
    KoZIhvcNAQEBBQADgY0AMIGJAoGBALFCDfmu1uYFy3DtHAo/kJUFqXF6utq2ga+T
    ow2PNEyuX+70SqyZ0vFwiL8di9b1mLMHLp3WBDPmXjVfNkANHk6Q38RlfyzT7iYp
    vhi6+4OVthzC65FaqwnEEiodZ7z7yx8vRhj4lVxeoNJpJexGr1MHuYr8tobeljgE
    mrLP17aNAgMBAAGjggEbMIIBFzAJBgNVHRMEAjAAMDUGCWCGSAGG+EIBDQQoFiZT
    dW5PTkUtUFRTIFBvcnRhbDogT3BlblNTTCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQU
    wkhhgKwbt1P8SXrRHpesVuhel0gwgbMGA1UdIwSBqzCBqIAUIALOde3lgiZiUwXo
    PTiN/YaJKoihgYykgYkwgYYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9y
    bmlhMQ8wDQYDVQQKEwZTU0UtU1cxDzANBgNVBAsTBlBvcnRhbDEYMBYGA1UEAxMP
    VmVlcmEgTmF0YXJhamFuMSYwJAYJKoZIhvcNAQkBFhd2ZWVyYS5uYXRhcmFqYW5A
    c3VuLmNvbYIBADANBgkqhkiG9w0BAQQFAAOBgQAdsOxEygD/Rbj4NWHhTrAZcn2B
    mWv40MFS1oAgJSMc5BPTBGHcSnnLEh0ZApFLfWknVro4ubW3mb5ByaHoR3sOsxAO
    4705avDUgX2g+4V80ef2CVOo5AoZRNMgVMt4Ju3D1PDZsDWQstbfV3PTeMyAzy/7
    NZh1+adCuh8J+Rhl4Q==
    -----END CERTIFICATE-----

  4. 別の証明書を取得するには、上記と同じ手順に従います。

NSS ソフトウェアトークンに証明書を追加する手順

  1. たとえば、/tmp/caissuedFirstCert などの一時ディレクトリに、署名済み証明書を保存します。

    この例では、上記の手順に従って別の署名済み証明書を取得し、/tmp/caissuedSecondCert に保存したと想定します。

  2. CA により署名済みのサーバー証明書をインストールします。
    ./msgcert add-cert  -W Messaging-Server-Root/config/sslpassword Server-Cert \
          /tmp/caissuedFirstCert
    
    ../msgcert add-cert  -W Messaging-Server-Root/config/sslpassword SolCrypto-Framework \
          /tmp/caissuedSecondCert

  3. 取得した他の証明書について、上記の手順 1 と 2 を繰り返します。
  4. 証明書が正常にインストールされたことを確認します。
    #./msgcert list-certs -W Messaging-Server-Root/config/sslpassword
    ....
    2 certificates found


SSL 用に個々の Messaging Server プロセスを構成する

ここでは、SSL 用にさまざまな Messaging Server プロセスを構成する手順を説明します。

SSL 用に MMP を構成する手順

  1. SSL 証明書のニックネームを設定します。

    ImapProxyAService.cfg ファイルおよび PopProxyAService.cfg ファイルを次のように編集し、default:SSLCertNickNames の行を "Server-Cert" に変更します。

    # cd Messaging-Server-Root/data/config
    ImapProxyAService.cfg: default:SSLCertNicknames  "Server-Cert"
    PopProxyAService.cfg:  default:SSLCertNicknames  "Server-Cert"

  2. SSL と IMAP を有効にするために、ImapProxyAService.cfg ファイルを編集し、該当の SSL 設定のコメントを解除します。

    ImapProxyAService.cfg ファイルの例を次に示します。

    # SSL configuration
    #
    #  Enable SSL from client to MMP with this:
    default:SSLEnable         yes
    default:SSLPorts         993
    default:SSLCertNicknames  Server-Cert
    #  Password File for SSL server keys:
    default:SSLKeyPasswdFile <Messaging_Server_Root>/config/sslpassword.conf
    #  Where SSL session cache, secmod, cert, and key files are located:
    default:SSLCacheDir      <Messaging_Server_Root>/config
    #  Customizable SSL security module database file name:
    default:SSLSecmodFile     secmod.db
    #  Customizable SSL cert7.db and key3.db file prefixes:
    default:SSLCertPrefix     ""
    default:SSLKeyPrefix      ""
    #  Use SSL on this port when talking to the backend server (0 = don't use SSL)
    default:SSLBacksidePort   993
    default:ServiceList  /opt/SUNWmsgsr/lib/ImapProxyAService@1143|1993
    /opt/SUNWmsgsr/lib/PopProxyAService@1110|1995

  3. SSL と POP を有効にするために、PopProxyAService.cfg ファイルを編集し、該当する SSL 設定のコメントを解除します。
  4. AService.cfg ファイルを編集します。SSL と POP については、ServiceList 設定の 1110 のあとに |1995 を追加します。 For SSL and IMAP, add |1993 after 1143.

    AService.cfg ファイルは次のようになるはずです。

    default:ServiceList  /opt/SUNWmsgsr/lib/ImapProxyAService@1143|1993 /opt/SUNWmsgsr/lib/PopProxyAService@1110|1995

SSL 用に IMAP を構成する手順

  1. configutil コマンドを使用し、SSL が有効になるように次の構成パラメータを設定します。
    ./configutil -o service.imap.enablesslport -v yes
    ../configutil -o service.imap.enable -v 1
    ../configutil -o service.imap.sslport -v 993
    ../configutil -o service.imap.sslusessl -v yes

  2. configutil コマンドを使用し、SSL 証明書のニックネームを設定します。
    ./configutil -o encryption.rsa.nssslpersonalityssl -v "Server-Cert"

SSL 用に POP を構成する手順

  1. configutil コマンドを使用し、SSL が有効になるように次の構成パラメータを設定します。
    ./configutil -o service.pop.enable -v 1
    ../configutil -o service.pop.enablesslport -v yes
    ../configutil -o service.pop.sslport -v 995
    ../configutil -o service.pop.sslusessl -v yes

  2. configutil コマンドを使用し、SSL 証明書のニックネームを設定します。
    ./configutil -o encryption.rsa.nssslpersonalityssl -v "Server-Cert"

SSL 用に HTTP を構成する手順

  1. configutil コマンドを使用し、SSL が有効になるように次の構成パラメータを設定します。
    ./configutil -o service.http.enable -v 1
    ../configutil -o service.http.enablesslport -v yes
    ../configutil -o service.http.sslport -v 443
    ../configutil -o service.http.sslusessl -v yes

  2. configutil コマンドを使用し、SSL 証明書のニックネームを設定します。
    ./configutil -o encryption.rsa.nssslpersonalityssl -v "Server-Cert"

SSL 用に SMTP を構成する手順

  1. configutil コマンドを使用し、SSL 証明書のニックネームを設定します。
    ./configutil -o encryption.rsa.nssslpersonalityssl -v "Server-Cert"

  2. 送信メッセージに対して SSL 暗号化を有効にするために、チャネル定義を変更し、maytlsmusttls などの TLS チャネルキーワードを追加します。
  3. 代替ポート上で SSL をサポートするには、Messaging-Server-Root/config ディレクトリにある dispatcher.cnf ファイル内の TLS_PORT エントリのコメントを解除します。

    次に例を示します。

    port 465
    TLS_PORT=465

    注: SSL 証明書のニックネームについては、サービスごとに異なる構成設定を使用することもできます。同じ意味 (つまりニックネーム) を持ち、encryption.rsa.sslpersonalityssl 設定を変更する構成パラメータは次のとおりです。

    • local.imta.sslnicknames (SMTP サーバー用および Submit サーバー用)
    • local.imap.sslnicknames (IMAP サーバー用)
    • local.pop.sslnicknames (POP サーバー用)
    • local.http.sslnicknames (HTTP サーバー用)

SSL 設定を確認する手順

  1. netstat コマンドを使用し、サービスが実行されていることを確認します。

    次に例を示します。

    netstat -an | grep service.service.sslport

    service はキーワード mmpimappophttp、または smtp です。

  2. Messaging Server ログファイルにエラーが記録されているかどうかをチェックします。

    ログファイルは Messaging-Server-Root/log ディレクトリにあります。たとえば、imap ログファイルをチェックして、SSL 初期化エラー (ASockSSL_Init エラー) が記録されていないことを確認します。


Solaris Cryptographic Framework (SCF) を構成する

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

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

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

  1. mailsrv ユーザーになります。
    su mailsrv

  2. id コマンドを実行します。
    $ id
    
    uid=207023(mailsrv) gid=6(mail)

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

  4. 新しいパスフレーズを作成します。(パスフレーズは画面には表示されません。)

    このパスフレーズを使用して、証明書と鍵のペアを SCF トークンにインポートします。

  5. パスフレーズを再入力します。(パスフレーズは画面には表示されません。)

    パスフレーズが変更されたというメッセージが表示されます。

  6. /export/mailsrv ディレクトリに移動します。
    cd /export/mailsrv

  7. アクセス権をチェックします。
    $ ls -alrR
    ..:
    total 6
    drwx------   3 mailsrv  mail         512 Nov 16 17:21 .sunw
    drwxr-xr-x   4 root     sys          512 Oct 31 12:31 ..
    drwxrwxrwx   3 root     root         512 Nov 16 17:21 .
    
    ../.sunw:
    total 6
    drwx------   4 mailsrv  mail         512 Nov 16 17:21 pkcs11_softtoken
    drwxrwxrwx   3 root     root         512 Nov 16 17:21 ..
    drwx------   3 mailsrv  mail         512 Nov 16 17:21 .
    
    ../.sunw/pkcs11_softtoken:
    total 10
    drwx------   2 mailsrv  mail         512 Nov 16 17:21 public
    drwx------   2 mailsrv  mail         512 Nov 16 17:21 private
    -rw-------   1 mailsrv  mail         103 Nov 16 17:21 objstore_info
    drwx------   3 mailsrv  mail         512 Nov 16 17:21 ..
    drwx------   4 mailsrv  mail         512 Nov 16 17:21 .
    
    ../.sunw/pkcs11_softtoken/public:
    total 4
    drwx------   4 mailsrv  mail         512 Nov 16 17:21 ..
    drwx------   2 mailsrv  mail         512 Nov 16 17:21 .
    
    ../.sunw/pkcs11_softtoken/private:
    total 4
    drwx------   4 mailsrv  mail         512 Nov 16 17:21 ..
    drwx------   2 mailsrv  mail         512 Nov 16 17:21 .

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

cryptoadm ユーティリティーは、システムの暗号化プロバイダ情報の表示、各プロバイダに対する機構の構成、暗号化プロバイダのインストールまたはアンインストールを行います。 Solaris Cryptographic Framework では、ユーザーレベルのプロバイダ (PKCS#11 共有ライブラリ)、カーネルプロバイダ (ロード可能なカーネルソフトウェアモジュール)、カーネルハードウェアプロバイダ (暗号化ハードウェアデバイス) という 3 種類のプロバイダがサポートされます。cryptoadm ユーティリティーには、メタスロットの機能を有効化または無効化するサブコマンド、メタスロットの構成を表示するサブコマンド、メタスロットの機構のポリシーを構成するサブコマンドがあります。

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

    このサブコマンドの出力の一部分を次に示します。

    # cryptoadm list -m
    
    User-level providers:
    =====================
    Provider: /usr/lib/security/$ISA/pkcs11_kernel.so
    Mechanisms:
    CKM_DSA
    CKM_RSA_X_509
    CKM_RSA_PKCS
    
    Provider: /usr/lib/security/$ISA/pkcs11_softtoken.so
    Mechanisms:
    CKM_DES_CBC
    CKM_DES_CBC_PAD
    CKM_DES_ECB
    CKM_DES_KEY_GEN
    [.... so on ...]
    CKM_DSA
    CKM_DSA_SHA1
    CKM_DSA_KEY_PAIR_GEN
    [.... so on ...]
    CKM_TLS_MASTER_KEY_DERIVE_DH
    CKM_SSL3_KEY_AND_MAC_DERIVE
    CKM_TLS_KEY_AND_MAC_DERIVE
    CKM_TLS_PRF
    
    Kernel software providers:
    ==========================
    des: CKM_DES_ECB,CKM_DES_CBC,CKM_DES3_ECB,CKM_DES3_CBC
    aes: CKM_AES_ECB,CKM_AES_CBC,CKM_AES_CTR
    [.... so on ...]
    sha1: CKM_SHA_1,CKM_SHA_1_HMAC,CKM_SHA_1_HMAC_GENERAL
    md5: CKM_MD5,CKM_MD5_HMAC,CKM_MD5_HMAC_GENERAL
    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
    swrand: No mechanisms presented.
    
    Kernel hardware providers:
    ==========================
    ncp/0: CKM_DSA,CKM_RSA_X_509,CKM_RSA_PKCS

  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: all mechanisms are enabled,
    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 is enabled.

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.dbsecmod.db、および key3.dbconfig ディレクトリ (Messaging-Server-Root/config) にあると想定します。

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

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

    #./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. デフォルトの NSS ソフトウェアトークンの内容を表示します。

    sslpassword ファイルには、証明書データベースへのパスワードが保存されています。

    # ./msgcert list-certs -W Messaging-Server-Root/config/sslpassword
    
    Alias Valid from Expires on Self-signed?Issued by Issued to
    
    Server-Cert           2006/11/15 23:02     2007/11/15 23:02   n
    CN=CA,OU=test,O=authority,ST=California,C=US
    CN=foobar.siroe.com,OU=comms,O=Dev,L=Santaclara,ST=California,C=us
    SolCrypto-Framework  2006/11/16 00:14  2007/11/16 00:14        n
    CN=CA,OU=test,O=authority,ST=California,C=US
    CN=SCF,OU=comms,O=Dev,L=Santaclara,ST=California,C=us
    2 certificates found

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 <enter>' to abort,
    or <enter> to continue:
    
    Using database directory ../config...
    
    Module "Solaris crypto Framework" added to database.

  2. 次の手順に進みます。

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 <enter>' to abort, or <enter> 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 <enter>' to abort, or <enter> 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 ソフトウェアトークンから証明書と鍵のペアをエクスポートする手順

この手順では、NSS ソフトウェアトークンから証明書と鍵のペアを (PKCS#12 形式のファイルとして) エクスポートしたあと、その証明書と鍵のペアを SCF ソフトウェアトークンにインポートする方法を説明します。次の例は、内部トークンに含まれる 2 つの証明書をエクスポートする方法を示しています。

  1. PKCS#12 ファイルのパスワードを選択し、そのパスワードを /tmp/pkcs12password というファイルにコピーします。
    # echo "pkcspassword" > /tmp/pkcs12password

  2. 次のコマンドを実行し、内部トークンに含まれる 2 つの証明書を PKCS#12 形式のファイルにエクスポートします。
    # ./msgcert export-cert -W Messaging-Server-Root/config/sslpassword \
    -o /tmp/Server-Certpk12 -O /tmp/pkcs12password Server-Cert
    
    # file /tmp/Server-Certpk12
    
    /tmp/Server-Certpk12:   data

  3. 次の手順に進みます。

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

  1. 次の pk12util コマンドを実行します。
    $ ./pk12util -i /tmp/Server-Certpk12 -d ../config/ -h "Sun Metaslot"
    
    Enter Password or Pin for "Sun Metaslot":
    { This is the same password you entered, when running pktool setpin )
    Enter password for PKCS12 file:
    {PKCSpassword : password used to export certificates from the Internal Software Token }
    pk12util: PKCS12 IMPORT SUCCESSFUL

  2. 次の pk12util コマンドを実行します。
    $  ./pk12util -i /tmp/SCFpk12 -d ../config/ -h "Sun Metaslot"
    
    Enter Password or Pin for "Sun Metaslot":
    { This is the same password you entered, when running pktool setpin )
    Enter password for PKCS12 file:
    {PKCSpassword : password used to export certificates from the Internal Software Token }
    pk12util: PKCS12 IMPORT SUCCESSFUL

  3. 次の手順に進みます。

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

この手順では、証明書と鍵のペアがトークンに正常にインポートされたことを確認します。必ず mailsrv (つまり、Messaging Server ユーザー) としてログインしてください。

  1. 次の certutil コマンドを実行します。
    $ ./certutil -L -d ../config/ -h "Sun Metaslot"
    
    Enter Password or Pin for "Sun Metaslot":
    ( This is the same password you entered, when running pktool setpin. )
    Sun Metaslot:Server-Cert                                       u,u,u
    Sun Metaslot:SolCrypto-Framework                               u,u,u

  2. 次の certutil コマンドを実行します。
    $ ./certutil -K -d ../config/ -h "Sun Metaslot"
    
    Enter Password or Pin for "Sun Metaslot":
    ( This is the same password you entered, when running pktool setpin. )
    <0> Server-Cert
    <1> SolCrypto-Framework

  3. 次のセクションに進んで、Messaging Server を構成します。

外部トークンを使用するように Messaging Server を構成する

このセクションでは、外部トークンを使用するようにさまざまな Messaging Server プロセスを構成する手順を説明します。

外部トークンを使用するように Messaging Server プロセスを構成する手順

  1. ImapProxyAService.cfg ファイルと PopProxyAService.cfg ファイルを次のように編集して、MMP を構成します。
    # cd Messaging-Server-Root/data/config
    ImapProxyAService.cfg: default:SSLCertNicknames  "Sun Metaslot:Server-Cert"
    PopProxyAService.cfg:  default:SSLCertNicknames   "Sun Metaslot:Server-Cert"

  2. 外部トークンを使用するように次の構成パラメータを設定して、IMAP サーバーを構成します。
    ./configutil -o encryption.rsa.nssslpersonalityssl -v "Sun Metaslot:Server-Cert"
    OR
    ../configutil -o local.imap.sslnicknames -v "Sun Metaslot:Server-Cert"

  3. 外部トークンを使用するように次の構成パラメータを設定して、POP サーバーを構成します。
    ./configutil -o encryption.rsa.nssslpersonalityssl -v "Sun Metaslot:Server-Cert"
    OR
    ../configutil -o local.pop.sslnicknames -v "Sun Metaslot:Server-Cert"

  4. 外部トークンを使用するように次の構成パラメータを設定して、HTTP サーバーを構成します。
    # ./configutil -o encryption.rsa.nssslpersonalityssl -v "Sun Metaslot:Server-Cert"
    OR
    # ./configutil -o local.http.sslnicknames -v "Sun Metaslot:Server-Cert"

  5. 外部トークンを使用するように次の構成パラメータを設定して、SMTP サーバーを構成します。

    configutil コマンドを使用し、SSL 証明書のニックネームを設定します。

    ./configutil -o encryption.rsa.nssslpersonalityssl -v "Sun Metaslot:Server-Cert"
    OR
    ../configutil -o local.imta.sslnicknames -v "Sun Metaslot:Server-Cert"

    注: 前述のとおり、SSL 証明書のニックネームについては、サービスごとに異なる構成設定を使用することもできます。同じ意味 (つまりニックネーム) を持ち、encryption.rsa.sslpersonalityssl 設定を変更する構成パラメータは次のとおりです。

    • local.imta.sslnicknames (SMTP サーバー用および Submit サーバー用)
    • local.imap.sslnicknames (IMAP サーバー用)
    • local.pop.sslnicknames (POP サーバー用)
    • local.http.sslnicknames (HTTP サーバー用)

  6. "Sun Metaslot" パスワードを sslpassword.conf ファイルに保存します。

    "Sun Metaslot" はパスワードによって保護されています。サーバーを起動するたびに、パスワードの入力を求められます。パスワードを毎回入力する代わりに、Messaging Server は Messaging-Server-Root/config ディレクトリにある sslpassword.conf ファイルからパスワードを読み取ります。このファイルを次のように編集します。

    # cat Messaging-Server-Root/data/config/sslpassword.conf
     Sun Metaslot:secret
    ( "secret" : This is the same password you entered, when running pktool setpin )

Messaging Server サービスを起動してデバッグする手順

ここでは、Messaging Server サービスの再起動方法、エラーの存在チェック方法、SCF 環境の動作状態の確認方法を説明します。

  1. Messaging Server サービスを再起動します。
    # Messaging-Server-Root/sbin/start-msg
    Connecting to watcher ...
    Launching watcher ... 27351
    Starting ens server ... 27352
    Starting store server .... 27353
    Checking store server status .... ready
    Starting imap server .... 27354
    Starting pop server .... 27355
    Starting http server .... 27356
    Starting sched server ... 27357
    Starting dispatcher server .... 27359
    Starting job_controller server .... 27365

  2. ログファイルに SSL_init エラーが記録されていないことを確認します。また、tcp_smpt defaultimappop、および http の各ログファイルに ASockSSL_init エラーが記録されていないことを確認します。

    エラーが発生したときは、次のような情報がログファイルに記録されます。

    http:[31/Nov/2006:11:36:21 -0800]
    biotite httpd[27356]: General Error: SSLinitialization error:
    ASockSSL_Init: couldn't open slot Metaslot (-8127)
    imap:[31/Nov/2006:11:36:20 -0800]
    biotite imapd[27354]: General Error: SSLinitialization error:
    ASockSSL_Init: couldn't open slot Metaslot (-8127)
    pop:[31/Nov/2006:11:36:21 -0800]
    biotite popd[27355]: General Error:SSL initialization error:
    ASockSSL_Init: couldn't open slot Metaslot (-8127)
    tcp_smtp_server.log-0J8000L01MGM3Z00:[31/Nov/2006:11:36:22 -0800]
    biotite [27363]: General Error:SSL initialization error:
    ASockSSL_Init: couldn't open slot Metaslot (-8127)
    tcp_smtp_server.log-0J8000L03MGM3Z00:[31/Nov/2006:11:36:22 -0800]
    biotite [27364]: General Error:SSL initialization error:
    ASockSSL_Init: couldn't open slot Metaslot (-8127)

  3. SSL ポートが待機状態になっていることを確認します。
    # netstat -an | grep 995
      *.995                *.*                0      0 49152      0 LISTEN
    # netstat -an | grep 443
      *.443                *.*                0      0 49152      0 LISTEN
    # netstat -an | grep 465
      *.465                *.*                0      0 49152      0 LISTEN

  4. Solaris Cryptographic Framework 上でアプリケーションが起動されたら、前回のシステムブート以降に NCP を使用して実行された RSA 公開鍵復号化の回数を表示するために、kstat コマンドを実行します。

    RSA 公開鍵復号化の回数は、kstat コマンドの出力内で rsapublic の値として表示されます。rsapublic の値が正の増分で増えていけば、NCP は正常に動作しています。

    # kstat -n ncp0 | grep rsa
    rsprivate                      X
    rsapublic                      X

    上記のコマンド出力の説明:

    • rsaprivate - RSA 非公開鍵復号化のためにデバイスに送信されたジョブの総数。

    • rsapublic - RSA 公開鍵復号化のためにデバイスに送信されたジョブの総数。

    ブラウザを使用して HTTP SSL ポートに接続し、ログインすると、ジョブ総数が増加していくのがわかります。次に例を示します。

    <Log in to https://host1.red.example.com>
    
    # kstat -n ncp0 | grep rsa
    rsaprivate	35       
    rsapublic 	146
    
    # kstat -n ncp0 | grep rsa
    rsaprivate	38       
    rsapublic 	149


参考資料

Solaris Cryptographic Framework の詳細は、次の資料を参照してください。


Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.


BigAdmin