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

最終更新日: 1998 年 5 月 20 日


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

概要: 証明書とは

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

ここで使う重要な用語のいくつかについて、説明します。

「公開鍵」
特定のエンティティと関連付けられた番号で、そのエンティティと信頼できる対話を行う必要のあるすべてのエンティティに知られることを想定しています。公開鍵は、署名の検証に使われます。
「デジタル署名」
「デジタル署名」されたデータは、エンティティの「アイデンティティ」と、エンティティがデータについて知っていることを証明する署名とともに格納されています。エンティティの非公開鍵を使って署名することで、データを偽造できなくなります。
「アイデンティティ」
エンティティを示す既知の方法です。システムによって、公開鍵がアイデンティティになっている場合や、UNIX UID、電子メールアドレス、X.509 識別名などが使われている場合があります。
「署名」
署名は、エンティティ (署名者) の非公開鍵を使い、あるデータに対して計算されるものです。
「非公開鍵」
所有している特定のエンティティだけしか知らないと仮定される値です。つまり、秘密が保たれていると想定されています。非公開鍵と公開鍵は、すべての公開鍵暗号化システムで対になって存在しています。DSA などの代表的な公開鍵暗号化システムでは、非公開鍵はただ 1 つの公開鍵に対応しています。非公開鍵を使って、署名が計算されます。
「エンティティ」
ある程度信頼できる人物、組織、プログラム、コンピュータ、ビジネス、銀行などです。

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


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

現在、X.509 証明書のアプリケーションでもっとも身近なものは、SSL プロトコルをサポートする Web ブラウザ (Netscape NavigatorTM や Microsoft Internet Explorer など) です。SSL (Secure Socket Layer) は、ネットワークトラフィックにプライバシーと認証機能を提供するセキュリティプロトコルです。SSL をサポートするブラウザは、SSL をサポートする 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 の証明書など、場合によっては、発行者が自分自身の証明書に署名します。
    有効期間
    証明書はどれも、有効である期間が限られています。この期間は開始の日付と時刻、および終了の日付と時刻で指定されており、短い場合で数秒、長い場合は 1 世紀近くになる場合があります。選択される有効期間は、証明書への署名に使われる非公開鍵の強度や証明書に支払う金額など、さまざまな要因で異なります。有効期間は、使用する非公開鍵が損なわれない場合に、エンティティが公開鍵を信頼できると期待される期間です。
    被認証者
    証明書で公開鍵が識別されているエンティティの名前です。この名前は X.500 標準を使うので、インターネット全体で一意なものと想定されます。これは、エンティティの識別名 (DN) で、次はその例です。
        CN=Java Duke, OU=Java Software Division, O=Sun Microsystems Inc, C=US
    
    ここでは、被認証者の一般名、組織単位、組織、および国が示されています。
    被認証者の公開鍵情報
    名前が記されているエンティティの公開鍵と、その鍵が属している公開鍵暗号化システムを示すアルゴリズム識別子および関連する鍵パラメータです。

    「X.509 Version 1」は 1988 年から利用されており、広く採用されているもっとも一般的な標準です。

    「X.509 Version 2」は、被認証者名と発行者名が再度使用される可能性を想定して、被認証者と発行者の一意な識別子の概念を導入したものです。ほとんどの証明書プロファイル文書では、名前を再使用しないことと、証明書で一意な識別子を使わないことが、強く推奨されています。Version 2 の証明書は、広くは使われていません。

    「X.509 Version 3」は最新 (1996) のバージョンで、拡張情報の考え方をサポートしています。つまり、誰でも拡張情報を定義し、認定に加えることができます。現在使われている一般的な拡張情報としては、「KeyUsage」(鍵の使用を「署名のみ」など特定の目的に限定するもの) と「AlternativeNames」(DNS 名、電子メールアドレス、IP アドレスなど、ほかのアイデンティティも公開鍵に関連付けられるようにするもの) があります。拡張情報は、「重要 (critical)」に指定することで、確認および強制的な使用が必要であることを示すことができます。たとえば、重要に指定され、「KeyCertSign」に設定された KeyUsage 拡張情報が証明書にある場合、この証明書が SSL 通信の間に提示されると、その証明書は破棄されます。これは、証明書の拡張情報によって、対応する非公開鍵は証明書への署名にだけ使用でき、SSL では使用できないことが示されているためです。

    証明書のデータはすべて、ASN.1 と DER という 2 種類の関連標準を使って符号化されます。「Abstract Syntax Notation 1 (ASN.1)」は、データを記述するものです。「Definite Encoding Rules (DER)」は、そのデータを格納および伝送するための単一の方法を記述するものです。この組み合わせは、「強力かつ柔軟」であると同時に「わかりにくく使いづらい」ものであると言われています。

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


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

    java.security.cert にある Certificate API には、次のクラスとインタフェースが含まれています。

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

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

    キーストアは保護されたデータベースで、企業で使う鍵と証明書が格納されています。キーストアへのアクセスはパスワードで保護されています。パスワードは、キーストアの作成時にキーストアの作成者によって定義され、現在のパスワードを提示した場合にだけ変更できます。さらに、キーストアに格納されている非公開鍵を、専用のパスワードで個別に保護できます。

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


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

    Sun
    Java ソフトウェア