Solaris のシステム管理 (セキュリティサービス)

第 15 章 Solaris 鍵管理フレームワーク

Solaris 10 8/07 リリースから、鍵管理フレームワーク (KMF) を通じて、公開鍵オブジェクトを管理するためのツールとプログラミングインタフェースが提供されています。公開鍵オブジェクトには、X.509 証明書や公開鍵/非公開鍵ペアが含まれます。これらのオブジェクトの格納形式としては、さまざまなものが使えます。また、KMF では、アプリケーションによる X.509 証明書の使用方法を定義したポリシーを管理するためのツールも提供されます。

公開鍵技術の管理

鍵管理フレームワーク (KMF) は、公開鍵技術 (PKI) を管理するための統一されたアプローチを提供します。Solaris OS には、PKI 技術を利用する異なるアプリケーションがいくつか含まれています。各アプリケーションはそれぞれ独自のプログラミングインタフェース、鍵格納メカニズム、および管理ユーティリティーを提供します。アプリケーションがあるポリシー適用メカニズムを提供する場合、そのメカニズムはそのアプリケーションにしか適用されません。KMF では、アプリケーションは統一された管理ツール群、単一のプログラミングインタフェース群、および単一のポリシー適用メカニズムを使用します。これらのインタフェースを採用したすべてのアプリケーションの PKI ニーズは、これらの機能によって管理されます。

KMF では、次のインタフェースによって公開鍵技術の管理が統一されます。

鍵管理フレームワークのユーティリティー

KMF は、鍵の格納を管理するための手段を提供するとともに、それらの鍵の使用に関する包括的なポリシーを提供します。KMF は、次の 3 つの公開鍵技術のポリシー、鍵、および証明書を管理します。

kmfcfg ツールを使えば、KMF ポリシーエントリの作成、変更、または削除を行えます。KMF は、pktool コマンド経由でキーストアを管理します。詳細については、kmfcfg(1)pktool(1) のマニュアルページ、および次の各節を参照してください。

KMF のポリシー管理

KMF のポリシーはデータベース内に格納されます。このポリシーデータベースは、KMF プログラミングインタフェースを使用するすべてのアプリケーションによって内部的にアクセスされます。このデータベースを使えば、KMF ライブラリによって管理される鍵や証明書の使用に、制約を設けることができます。アプリケーションは、証明書の検証を試みる際に、ポリシーデータベースをチェックします。kmfcfg コマンドはポリシーデータベースを変更します。

KMF のキーストア管理

KMF は、PKCS #11 トークン、NSS、OpenSSL の 3 つの公開鍵技術のキーストアを管理します。pktool コマンドを使えば、これらすべての技術について次のことが行えます。

PKCS #11 および NSS 技術の場合には、pktool コマンドでパスフレーズを生成して PIN を設定することもできます。

pktool ユーティリティーの使用例については、pktool(1) のマニュアルページおよび 「鍵管理フレームワークの使用 (作業マップ)」を参照してください。

鍵管理フレームワークの使用 (作業マップ)

鍵管理フレームワーク (KMF) を使うと公開鍵技術を集中管理できます。

作業 

説明 

参照先 

証明書を作成します。 

PKCS #11、NSS、SSL で使用される証明書を作成します。 

pktool gencert コマンドを使って証明書を作成する方法」

証明書をエクスポートします。  

証明書とそれをサポートする鍵を含むファイルを作成します。このファイルはパスワードで保護できます。 

「証明書と非公開鍵を PKCS #12 形式でエクスポートする方法」

証明書をインポートします。 

別のシステムから取得した証明書をインポートします。 

「証明書をキーストアにインポートする方法」

別のシステムから取得した PKCS #12 形式の証明書をインポートします。 

例 15–2

パスフレーズを生成します。 

PKCS #11 キーストアまたは NSS キーストアにアクセスするためのパスフレーズを生成します。 

pktool setpin コマンドを使ってパスフレーズを生成する方法」

鍵管理フレームワークの使用 (手順)

この節では、パスワード、パスフレーズ、ファイル、キーストア、証明書、CRL などの公開鍵オブジェクトを、pktool コマンドを使って管理する方法について説明します。

Procedurepktool gencert コマンドを使って証明書を作成する方法

この手順では、自己署名付き証明書を作成し、その証明書を PKCS #11 キーストアに格納します。また、この処理の一部として、RSA 公開鍵/非公開鍵ペアも作成されます。非公開鍵は、証明書とともにキーストアに格納されます。

  1. 自己署名付き証明書を生成する。


    % pktool gencert [keystore=keystore] label=label-name \
    subject=subject-DN serial=hex-serial-number
    
    keystore=keystore

    公開鍵オブジェクトのタイプを指定することでキーストアを指定します。指定可能な値は nsspkcs11ssl のいずれかです。このキーワードは省略可能です。

    label=label-name

    発行者が証明書に与える一意の名前です。

    subject=subject-DN

    証明書の識別名です。

    serial=hex-serial-number

    16 進形式のシリアル番号です。証明書の発行者が、0x0102030405 などの番号を選択します。

  2. キーストアの内容を確認します。


    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    n. ...

    このコマンドは、キーストア内のすべての証明書を一覧表示します。次の例では、キーストアには証明書が 1 つしか含まれていません。


例 15–1 pktool を使って自己署名付き証明書を作成する

次の例では、My Company のあるユーザーが自己署名付き証明書を作成し、その証明書を PKCS #11 オブジェクト用のキーストアに格納しています。このキーストアは最初は空になっています。キーストアが初期化されていない場合、ソフトトークンの PIN は changeme になります。


% pktool gencert keystore=pkcs11 label="My Cert" \
subject="C=US, O=My Company, OU=Security Engineering Group, CN=MyCA" \
serial=0x000000001
Enter pin for Sun Software PKCS#11 softtoken:Type PIN for token

% pktool list
Found 1 certificates.
1. (X.509 certificate)
      Label: My Cert
      ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
      Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Serial: 0x01

Procedure証明書をキーストアにインポートする方法

この手順では、PEM または生の DER を使ってエンコードされた PKI 情報を含むファイルを、キーストアにインポートする方法を説明します。エクスポートの手順については、例 15–4 を参照してください。

  1. 証明書をインポートします。


    % pktool import keystore=keystore infile=infile-name label=label-name
    
  2. 非公開 PKI オブジェクトをインポートする場合、プロンプトが表示されたときにパスワードを入力します。

    1. プロンプトで、ファイルのパスワードを入力します。

      PKCS #12 形式のエクスポートファイルなど、非公開の PKI 情報をインポートする場合、そのファイルはパスワードを必要とします。インポートするファイルの作成者が PKCS #12 パスワードを教えてくれます。


      Enter password to use for accessing the PKCS12 file:Type PKCS #12 password
      
    2. プロンプトで、キーストアのパスワードを入力します。


      Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
      
  3. キーストアの内容を確認します。


    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    2. ...

例 15–2 PKCS #12 ファイルをキーストアにインポートする

次の例では、サードパーティーから取得した PKCS #12 ファイルをインポートしています。pktool import コマンドは、gracedata.p12 ファイルから非公開鍵と証明書を取り出し、それらを指定されたキーストア内に格納します。


% pktool import keystore=pkcs11 infile=gracedata.p12 label=GraceCert
Enter password to use for accessing the PKCS12 file:Type PKCS #12 password
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
Found 1 certificate(s) and 1 key(s) in gracedata.p12
% pktool list
Found 1 certificates.
1. (X.509 certificate)
        Label: GraceCert
        ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
        Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
        Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
        Serial: 0x01


例 15–3 X.509 証明書をキーストアにインポートする

次の例では、PEM 形式の X.509 証明書を指定されたキーストアにインポートしています。この公開証明書はパスワードで保護されていません。ユーザーの公開キーストアもパスワードで保護されていません。


% pktool import keystore=pkcs11 infile=somecert.pem label="TheirCompany Root Cert"
% pktool list
Found 1 certificates.
1. (X.509 certificate)
        Label: TheirCompany Root Cert
        ID: 21:ae:83:98:24:d1:1f:cb:65:5b:48:75:7d:02:47:cf:98:1f:ec:a0
        Subject: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA
        Issuer: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA
        Serial: 0x01

Procedure証明書と非公開鍵を PKCS #12 形式でエクスポートする方法

PKCS #12 形式のファイルを作成し、非公開鍵とそれに関連付けられた X.509 証明書をほかのシステムにエクスポートすることができます。このファイルへのアクセスはパスワードで保護されます。

  1. エクスポートする証明書を見つけます。


    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    2. ...
  2. 鍵と証明書をエクスポートします。

    pktool list コマンドから得られたキーストアとラベルを使用します。エクスポートファイルのファイル名を指定します。名前に空白が含まれている場合は、名前を二重引用符で囲みます。


    % pktool export keystore=keystore outfile=outfile-name label=label-name
    
  3. エクスポートファイルをパスワードで保護します。

    プロンプトで、キーストアの現在のパスワードを入力します。ここで、エクスポートファイルのパスワードを作成します。ファイルの受信者は、インポート時にこのパスワードを入力する必要があります。


    Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
    Enter password to use for accessing the PKCS12 file:Create PKCS #12 password
    

    ヒント –

    パスワードはエクスポートファイルとは別に送ってください。パスワードを伝える最良の方法は、電話上など、通常の通信手段以外の手段を使用する方法です。



例 15–4 証明書と非公開鍵を PKCS #12 形式でエクスポートする

次の例では、あるユーザーが、非公開鍵とそれに関連付けられた X.509 証明書を、標準 PKCS #12 ファイル内にエクスポートしています。このファイルは、ほかのキーストアにインポートできます。PKCS #11 パスワードはソースのキーストアを保護します。PKCS #12 パスワードは、PKCS #12 ファイル内の非公開データを保護するために使用されます。このパスワードはファイルのインポート時に必要となります。


% pktool list
Found 1 certificates.
1. (X.509 certificate)
      Label: My Cert
      ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
      Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Serial: 0x01

% pktool export keystore=pkcs11 outfile=mydata.p12 label="My Cert"
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
Enter password to use for accessing the PKCS12 file:Create PKCS #12 password

続いて、このユーザーは受信者に電話をかけ、PKCS #12 パスワードを伝えます。


Procedurepktool setpin コマンドを使ってパスフレーズを生成する方法

キーストア内のあるオブジェクトに対して、あるいはキーストアそのものに対して、パスフレーズを生成することができます。このパスフレーズは、オブジェクトやキーストアにアクセスする際に必要となります。キーストア内のオブジェクトに対するパスフレーズの生成例については、例 15–4 を参照してください。

  1. キーストアにアクセスするためのパスフレーズを生成します。


    % pktool setpin keystore=nss|pkcs11 dir=directory
    
  2. プロンプトに答えます。

    キーストアにまだパスワードが設定されていない場合には、Return キーを押してパスワードを作成します。


    Enter current token passphrase:Press the Return key
    Create new passphrase:Type the passphrase that you want to use
    Re-enter new passphrase:Retype the passphrase
    Passphrase changed.

    これでキーストアがパスフレーズで保護されます。 パスフレーズを忘れると、キーストア内のオブジェクトにアクセスできなくなります。


例 15–5 キーストアをパスフレーズで保護する

次の例は、NSS データベースのパスフレーズを設定する方法を示したものです。パスフレーズがまだ作成されていないため、最初のプロンプトで Return キーを押します。


% pktool setpin keystore=nss dir=/var/nss
Enter current token passphrase:Press the Return key
Create new passphrase:    has8n0NdaH
Re-enter new passphrase:  has8n0NdaH
Passphrase changed.