証明書の概要Intro to certificates

この記事では、ユニバーサル Windows プラットフォーム (UWP) アプリでの証明書の使用について説明します。This article discusses the use of certificates in Universal Windows Platform (UWP) apps. デジタル証明書は、公開キーを個人、コンピューター、組織にバインドするために、公開キーの暗号化で使われます。Digital certificates are used in public key cryptography to bind a public key to a person, computer, or organization. バインドされた識別情報は、あるエンティティを別のエンティティに対して認証する際に最も頻繁に使われます。The bound identities are most often used to authenticate one entity to another. たとえば、証明書は、Web サーバーをユーザーに対して、また、ユーザーを Web サーバーに対して認証するためによく使われます。For example, certificates are often used to authenticate a web server to a user and a user to a web server. 証明書要求を作成し、発行された証明書をインストールまたはインポートすることができます。You can create certificate requests and install or import issued certificates. また、証明書階層で証明書を登録することもできます。You can also enroll a certificate in a certificate hierarchy.

共有証明書ストアShared certificate stores

UWP アプリでは、Windows 8 で導入された新しい主義アプリケーション モデルを使用します。UWP apps use the new isolationist application model introduced in Windows 8. この分離モデルでは、アプリ コンテナーと呼ばれる低レベルのオペレーティング システム構造内で実行し、明示的に許可されない限り、アプリの外にあるリソースやファイルにアクセスすることは禁止されます。In this model, apps run in low-level operating system construct, called an app container, that prohibits the app from accessing resources or files outside of itself unless explicitly permitted to do so. 次のセクションでは、これが公開キー基盤 (PKI) に与える影響について説明します。The following sections describe the implications this has on public key infrastructure (PKI).

アプリ コンテナーごとの証明書ストレージCertificate storage per app container

特定のアプリ コンテナー内での使用を目的とした証明書は、ユーザーごと、アプリ コンテナーの場所ごとに格納されます。Certificates that are intended for use in a specific app container are stored in per user, per app container locations. アプリ コンテナー内で実行されるアプリは、そのアプリが持つ証明書ストレージにだけ書き込みアクセスが許可されます。An app running in an app container has write access to only its own certificate storage. アプリが自分のストアのどこかに証明書を追加した場合には、その証明書は他のアプリから読み取られることはありません。If the application adds certificates to any of its stores, these certificates cannot be read by other apps. アプリがアンインストールされると、そのアプリに固有の証明書もすべて削除されます。If an app is uninstalled, any certificates specific to it are also removed. アプリは、MY ストアや REQUEST ストア以外にローカル コンピューターの証明書ストアにも読み取りアクセスが許可されます。An app also has read access to local machine certificate stores other than the MY and REQUEST store.

キャッシュCache

各アプリ コンテナーは分離されたキャッシュを持ち、その中に検証に必要な発行者証明書、証明書失効リスト (CRL)、オンライン証明書ステータス プロトコル (OCSP) の応答を格納できます。Each app container has an isolated cache in which it can store issuer certificates needed for validation, certificate revocation lists (CRL), and online certificate status protocol (OCSP) responses.

共有証明書とキーShared certificates and keys

スマート カードがリーダーに入れられると、カードに含まれている証明書とキーが MY ストアに伝えられ、ユーザーが実行している完全信頼アプリで共有されます。When a smart card is inserted into a reader, the certificates and keys contained on the card are propagated to the user MY store where they can be shared by any full-trust application the user is running. しかし、既定ではアプリ コンテナーはユーザーごとの MY ストアにはアクセスできません。By default, however, app containers do not have access to the per user MY store.

この問題に対応し、プリンシパル グループがリソース グループにアクセスできるように、アプリ コンテナー分離モデルは使う機能の概念をサポートしています。To address this issue and enable groups of principals to access groups of resources, the app container isolation model supports the capabilities concept. 使う機能を指定すると、アプリ コンテナーのプロセスによる特定のリソースへのアクセスが許可されます。A capability allows an app container process to access a specific resource. sharedUserCertificates 機能は、MY ストアとスマート カードの信頼されたルート ストア内にある証明書とキーへの読み取りアクセス許可を、アプリ コンテナーに与えます。The sharedUserCertificates capability grants an app container read access to the certificates and keys contained in the user MY store and the Smart Card Trusted Roots store. この機能によってユーザーの REQUEST ストアへの読み取りアクセス許可が与えられることはありません。The capability does not grant read access to the user REQUEST store.

次の例に示すようにマニフェスト内で sharedUserCertificates 機能を指定します。You specify the sharedUserCertificates capability in the manifest as shown in the following example.

<Capabilities>
    <Capability Name="sharedUserCertificates" />
</Capabilities>

証明書フィールドCertificate fields

X.509 公開キー証明書標準は、長い間に改定されてきました。The X.509 public key certificate standard has been revised over time. データ構造の継続的な各バージョンでは、次の図に示すように、以前のバージョンで存在していたフィールドを維持し、さらにフィールドを追加してきました。Each successive version of the data structure has retained the fields that existed in the previous versions and added more, as shown in the following illustration.

x.509 証明書バージョン 1、2、3

これらのフィールドと拡張機能の一部は、CertificateRequestProperties クラスを使って証明書要求を作成するときに直接指定できます。Some of these fields and extensions can be specified directly when you use the CertificateRequestProperties class to create a certificate request. ほとんどはできません。Most cannot. それらのフィールドは、発行元の機関によって入力される場合や、空欄のままにしておける場合があります。These fields can be filled by the issuing authority or they can be left blank. フィールドについて詳しくは、次のセクションをご覧ください。For more information about the fields, see the following sections:

バージョン 1 のフィールドVersion 1 fields

フィールドField 説明Description
バージョンVersion エンコードされた証明書のバージョン番号を指定します。Specifies the version number of the encoded certificate. 現在、このフィールドに指定可能な値は、0、1、または 2 です。Currently, the possible values of this field are 0, 1, or 2.
シリアル番号Serial Number 証明機関 (CA) によって証明書に割り当てられる、正の一意な整数を格納します。Contains a positive, unique integer assigned by the certification authority (CA) to the certificate.
署名アルゴリズムSignature Algorithm 証明書への署名に CA が使うアルゴリズムを指定するオブジェクト識別子 (OID) を格納します。Contains an object identifier (OID) that specifies the algorithm used by the CA to sign the certificate. たとえば、1.2.840.113549.1.1.5 は、SHA-1 ハッシュ アルゴリズムと、RSA Laboratories による RSA 暗号化アルゴリズムの組み合わせを示します。For example, 1.2.840.113549.1.1.5 specifies a SHA-1 hashing algorithm combined with the RSA encryption algorithm from RSA Laboratories.
発行者Issuer 証明書を作成し署名した CA の X.500 識別名 (DN) を格納します。Contains the X.500 distinguished name (DN) of the CA that created and signed the certificate.
有効期間Validity 証明書が有効である時間間隔を指定します。Specifies the time interval during which the certificate is valid. 2049 年末までの日付には、協定世界時 (グリニッジ標準時) 形式 (yymmddhhmmssz) を使います。Dates through the end of 2049 use the Coordinated Universal Time (Greenwich Mean Time) format (yymmddhhmmssz). 2050 年 1 月 1 日以降の日付には、一般化された時刻形式 (yyyymmddhhmmssz) を使います。Dates beginning with January 1st, 2050 use the generalized time format (yyyymmddhhmmssz).
サブジェクトSubject 証明書に含まれる公開キーに関連付けられているエンティティの X.500 識別名を格納します。Contains an X.500 distinguished name of the entity associated with the public key contained in the certificate.
公開キーPublic Key 公開キーと関連するアルゴリズム情報を格納します。Contains the public key and associated algorithm information.

バージョン 2 のフィールドVersion 2 fields

X.509 バージョン 2 の証明書には、バージョン 1 で定義された基本フィールドが含まれており、さらに次のフィールドが追加されています。An X.509 version 2 certificate contains the basic fields defined in version 1 and adds the following fields.

フィールドField 説明Description
発行者の一意な IDIssuer Unique Identifier 時間を経て別のエンティティによって再利用されたときに、CA の X.500 名を明白にするために使うことができる一意な値を格納します。Contains a unique value that can be used to make the X.500 name of the CA unambiguous when reused by different entities over time.
サブジェクトの一意な IDSubject Unique Identifier 時間を経て別のエンティティによって再利用されたときに、証明書のサブジェクトの X.500 名を明白にするために使うことができる一意な値を格納します。Contains a unique value that can be used to make the X.500 name of the certificate subject unambiguous when reused by different entities over time.

バージョン 3 の拡張機能Version 3 extensions

X.509 バージョン 3 の証明書には、バージョン 1 とバージョン 2 で定義されたフィールドが含まれており、さらに証明書の拡張機能が追加されています。An X.509 version 3 certificate contains the fields defined in version 1 and version 2 and adds certificate extensions.

フィールドField 説明Description
機関キー識別子Authority Key Identifier 証明書への署名に使われる証明機関 (CA) 秘密キーに対応する CA 公開キーを識別します。Identifies the certification authority (CA) public key that corresponds to the CA private key used to sign the certificate.
基本制限Basic Constraints エンティティを CA として利用できるかどうか、またできる場合は、証明書チェーンにおいてその下位に存在できる下位 CA の数を指定します。Specifies whether the entity can be used as a CA and, if so, the number of subordinate CAs that can exist beneath it in the certificate chain.
証明書ポリシーCertificate Policies 証明書が発行されたポリシーと、許可されている使用目的を指定します。Specifies the policies under which the certificate has been issued and the purposes for which it can be used.
CRL 配布ポイントCRL Distribution Points 基本の証明書失効リスト (CRL) の URI を格納します。Contains the URI of the base certificate revocation list (CRL).
拡張キー使用法Enhanced Key Usage 証明書に含まれる公開キーを使うことができる方法を指定します。Specifies the manner in which the public key contained in the certificate can be used.
発行者の別名Issuer Alternative Name 証明書要求の発行者に対する 1 つ以上の別名形式を指定します。Specifies one or more alternative name forms for the issuer of the certificate request.
キー使用法Key Usage 証明書に含まれる公開キーによって実行可能な操作に関する制限を指定します。Specifies restrictions on the operations that can be performed by the public key contained in the certificate.
名前の制限Name Constraints 証明書階層内のすべてのサブジェクト名が存在している必要がある名前空間を指定します。Specifies the namespace within which all subject names in a certificate hierarchy must be located. この拡張機能は CA 証明書でのみ使われます。The extension is used only in a CA certificate.
ポリシーの制限Policy Constraints ポリシー マッピングを禁止するか、階層内の各証明書に許容可能なポリシー識別子を含めることを要求することによって、パス検証を制限します。Constrains path validation by prohibiting policy mapping or by requiring that each certificate in the hierarchy contain an acceptable policy identifier. この拡張機能は CA 証明書でのみ使われます。The extension is used only in a CA certificate.
ポリシー マッピングPolicy Mappings 発行元の CA のポリシーに対応する、下位 CA のポリシーを指定します。Specifies the policies in a subordinate CA that correspond to policies in the issuing CA.
秘密キーの使用期間Private Key Usage Period 秘密キーが関連付けられている証明書の有効期間と異なる場合に、秘密キーに別の有効期間を指定します。Specifies a different validity period for the private key than for the certificate with which the private key is associated.
サブジェクト代替名Subject Alternative Name 証明書要求のサブジェクトに対する 1 つ以上の別名形式を指定します。Specifies one or more alternative name forms for the subject of the certificate request. 別名形式の例として、メール アドレス、DNS 名、IP アドレス、URI などがあります。Example alternative forms include email addresses, DNS names, IP addresses, and URIs.
Subject Directory Attributes (サブジェクト ディレクトリ属性)Subject Directory Attributes 証明書サブジェクトの国籍など、識別属性を指定します。Conveys identification attributes such as the nationality of the certificate subject. この拡張機能の値は、OID と値のペアが連続する形になります。The extension value is a sequence of OID-value pairs.
サブジェクト キー識別子Subject Key Identifier 証明書サブジェクトが保持する複数の公開キーを区別します。Differentiates between multiple public keys held by the certificate subject. この拡張機能の値は、通常は、キーの SHA-1 ハッシュです。The extension value is typically a SHA-1 hash of the key.