X.509 証明書と証明書の取り消しリスト (CRL)


概要:証明書とは
証明書を使うアプリケーション
証明書の取得方法
X.509 証明書の内容
証明書のアクセスと管理に使う Java API
X.509 証明書の生成、表示、インポート、およびエクスポートのための Java ツール

概要:証明書とは

「公開鍵証明書」とは、あるエンティティーが発行したデジタル署名のある文書で、別のエンティティーの公開鍵 (およびほかの情報) が特定の値であることを証明するものです。

以下では、いくつかの重要な用語について説明します。

公開鍵
公開鍵は、特定のエンティティーに関連付けられた数です。公開鍵は、該当するエンティティーとの間に信頼できる関係を持つ必要があるすべての人に対して公開することを意図したものです。公開鍵は、署名を検証するのに使われます。
デジタル署名
データが「デジタル署名」されると、そのデータは、エンティティーの「アイデンティティー」と、そのエンティティーがデータの内容について知っていることを証明する署名とともに格納されます。エンティティーの非公開鍵を使って署名することで、データを偽造できなくなります。
アイデンティティー
エンティティーを特定するための既知の方法です。システムによっては、公開鍵をアイデンティティーにするものがあります。公開鍵のほかにも、Unix UID や電子メールアドレス、X.509 識別名など、さまざまなものをアイデンティティーとすることができます。
署名
署名は、エンティティー (署名者) の非公開鍵を使い、あるデータに対して計算されるものです。
非公開鍵
非公開鍵は特定のエンティティーだけが知っている数のことで、この数のことを、そのエンティティーの非公開鍵といいます。非公開鍵は、ほかに知られないように秘密にしておくことが前提になっています。非公開鍵と公開鍵は、すべての公開鍵暗号化システムで対になって存在しています。DSA などの典型的な公開鍵暗号化システムの場合、1 つの非公開鍵は正確に 1 つの公開鍵に対応します。非公開鍵は、署名を計算するのに使われます。
エンティティー
エンテンティーは、人、組織、プログラム、コンピュータ、企業、銀行など、一定の度合いで信頼の対象となるさまざまなものを指します。

公開鍵暗号化では、その性質上、ユーザーの公開鍵にアクセスする必要があります。大規模なネットワーク環境では、互いに通信しているエンティティー間で以前の関係が引き続き確立されていると仮定したり、使われているすべての公開鍵を収めた信頼できるリポジトリが存在すると仮定したりすることは不可能です。このような公開鍵の配布に関する問題を解決するために証明書が考案されました。現在では、「証明書発行局 (CA)」が「信頼できる第三者」として機能します。CA は、信頼されて、ほかのエンティティーのために証明書に署名する (証明書を発行する) エンティティー (ビジネスなど) です。CA だけが、法的な契約による義務の下で、有効かつ信頼できる証明書を作成するものと見なされています。 VeriSignThawteEntrust をはじめ、多くの CA が存在します。Netscape や Microsoft の認証サーバー、Entrust の CA 製品などを所属組織内で利用すれば、独自の証明書発行局を運営することも可能です。


証明書を使うアプリケーション

現在、X.509 証明書のアプリケーションでもっとも身近なものは、TLS プロトコルをサポートする Web ブラウザ (Mozilla Firefox や Microsoft Internet Explorer など) です。TLS (Transport Layer Security) は、ネットワークトラフィックにプライバシーと認証機能を提供するセキュリティープロトコルです。TLS をサポートするブラウザは、TLS をサポートする Web サーバーとの間でだけ、このプロトコルを使うことができます。

X.509 の証明書に依存する技術としては、ほかに次のものがあります。


証明書の取得方法

証明書を取得する基本的な方法としては、次の 2 つがあります。

  1. 自分で作成する (keytool などの適当なツールを使う)
  2. 証明書発行局に証明書の発行を依頼する (直接要求する、または「keytool」などのツールを使って生成した要求を使う)
証明書の作成処理で必要になる主な入力には、次のものがあります。
  • 対になった「公開鍵と非公開鍵」。専用のツール (keytool など) やブラウザを使って生成されたものです。公開鍵だけが誰に対しても提示されます。非公開鍵は、データへの署名に使われます。他人に非公開鍵を知られると、所有者になりすまされて、所有者に帰属する法的な文書を偽造されることにもなりかねません。

  • 「認定されるエンティティー (自分など) についての情報」を提供する必要があります。一般に、名前や勤務先住所などの情報が含まれます。CA に証明書の発行を依頼する場合、通常、情報が正しいことを証明するものを提示しなければなりません。

    CA に証明書の発行を依頼する場合は、自分の非公開鍵と自分についての情報を提出します。keytool や、証明書署名要求 (CSR) の生成をサポートするブラウザなどのツールを使ってこの情報にデジタル署名し、CA に送ります。CA は証明書を生成して、送り返します。

    自分で証明書を生成する場合は、同様の情報に加えて、さらに若干の情報 (証明書の有効期間、シリアル番号など) を用意し、keytool などのツールを使って証明書を作成します。 自己署名の証明書では受け入れられない場合があります。CA が提供する価値の 1 つは、中立で信頼できる紹介サービスを提供することであり、その一部は、認証サービス業務 (CSP) の中で公開されている検証要件に基づいています。


    X.509 証明書の内容

    X.509 規格では、証明書に含める情報が定義されており、この情報を証明書に書き込む方法 (データ形式) についても記述されています。すべての X.509 証明書は、署名のほかに次のデータを含んでいます。

    バージョン
    証明書に適用される X.509 規格のバージョンを特定します。証明書に指定できる情報は、バージョンによって異なります。これまでに、3 つのバージョンが定義されています。
    シリアル番号
    証明書を作成したエンティティーは、そのエンティティーが発行するほかの証明書と区別するために、証明書にシリアル番号を割り当てます。この情報は、さまざまな方法で使われます。たとえば、証明書が取り消されると、シリアル番号が証明書の取り消しリスト (CRL) に格納されます。
    署名アルゴリズム識別子
    証明書に署名を付けるときに CA が使ったアルゴリズムを特定します。
    発行者名
    証明書に署名したエンティティーの X.500 名です。エンティティーは、通常は CA です。この証明書を使うことは、証明書に署名を付けたエンティティーを信頼することを意味します。「ルート」つまり「トップレベル」の CA の証明書など、場合によっては発行者が自身の証明書に署名を付けることがある点に注意してください。
    有効期間
    各証明書は、限られた期間だけ有効になります。この期間は開始の日時と終了の日時によって指定され、数秒の短い期間から 100 年という長期にわたることもあります。選択される有効期間は、証明書への署名に使われる非公開鍵の強度や証明書に支払う金額など、さまざまな要因で異なります。有効期間は、使用する非公開鍵が損なわれない場合に、エンティティーが公開鍵を信頼できると期待される期間です。
    Subject 名
    証明書で公開鍵が識別されているエンティティーの名前です。この名前は X.500 標準を使うので、インターネット全体で一意なものと想定されます。これは、エンティティーの識別名 (DN) で、次はその例です。
        CN=Java Duke, OU=Java Software Division, O=Sun Microsystems Inc, C=US
    
    これらはそれぞれ主体の通称、組織単位、組織、国を表します。
    Subject の公開鍵情報
    名前を付けられたエンティティーの公開鍵とアルゴリズム識別子です。アルゴリズム識別子では、公開鍵に対して使われている公開鍵暗号化システムおよび関連する鍵パラメータが指定されています。

    「X.509 Version 1」は、1988 年から利用されて広く普及しており、もっとも一般的です。

    「X.509 Version 2」では、Subject や発行者の名前をあとで再利用できるようにするために、Subject と発行者の一意識別子の概念が導入されました。ほとんどの証明書プロファイル文書では、名前を再使用しないことと、証明書で一意な識別子を使わないことが、強く推奨されています。Version 2 の証明書は、広くは使われていません。

    「X.509 Version 3」はもっとも新しい (1996 年) 規格で、エクステンションの概念をサポートしています。エクステンションは誰でも定義することができ、証明書に含めることができます。現在使われている一般的なエクステンションとしては、KeyUsage (「署名専用」など、鍵の使用を特定の目的に制限する)、AlternativeNames (DNS 名、電子メールアドレス、IP アドレスなど、ほかのアイデンティティーを公開鍵に関連付けることができる) などがあります。エクステンションには、critical というマークを付けて、そのエクステンションのチェックと使用を義務づけることができます。たとえば、critical とマークされ、KeyCertSign が設定された KeyUsage エクステンションが証明書に含まれている場合、この証明書を SSL 通信中に提示すると、証明書が拒否されます。これは、証明書のエクステンションによって、関連する非公開鍵が証明書の署名専用として指定されており、SSL では使用できないためです。

    証明書のすべてのデータは、ASN.1/DER と呼ばれる 2 つの関連規格を使って符号化されます。Abstract Syntax Notation 1 はデータについて記述しています。Definite Encoding Rules は、データの保存および転送の方法について記述しています。この組み合わせは、「強力かつ柔軟」であると同時に「わかりにくく使いづらい」ものであると言われています。

    IETF PKIX の作業班は、インターネット公開鍵インフラストラクチャー (PKI) の標準化を進めています。 われわれはこの作業に常に注目しており、RFC 3280 で規定されている「X.509 Certificate and CRL Profile」をサポートします。


    証明書のアクセスと管理に使う Java API

    java.security.cert にある Certificate API には、次のクラスとインタフェースが含まれています。 JDK 1.4 で、証明書チェーンまたは証明書パスの構築および検証をサポートするために、新しいクラスが追加されました。これらのクラスの詳細は、「PKI プログラマーズガイド」を参照してください。

    X.509 証明書の生成、表示、インポート、およびエクスポートのための Java ツール

    keytool ( Solaris 用) (Windows 用) という名前のツールがあり、 このツールを使用すると、公開鍵と非公開鍵のペアや自己署名の X.509 Version 3 証明書を作成したり、キーストアを管理したりできます。鍵と証明書を使って、Java アプリケーションやアプレットにデジタル署名します (jarsigner ツール (Solaris 用) (Windows 用) を参照)。

    キーストアとは、鍵と証明書を保持する保護されたデータベースです。キーストアへのアクセスは、パスワードによって保護されます。キーストアのパスワードは、キーストアの作成時に作成者が定義し、変更できるのは、パスワードが現在設定されている場合にだけです。また、キーストアに含まれる非公開鍵は、それぞれのパスワードによって保護できます。

    keytool を使用すると、ファイルとして格納されている X.509 v1、v2、および v3 の証明書の表示、インポート、およびエクスポートが可能で、自己署名による新しい v3 証明書を作成することもできます。具体的には、keytool のドキュメント (Solaris 用) (Windows 用) の「例」を参照してください。


    Copyright © 1995-2006 Sun Microsystems, Inc.All Rights Reserved.コメントの送付先:java-security@sun.com

    Sun
    Java Software