この記事では、WinUI アプリでの証明書の使用について説明します。 デジタル証明書は、公開キーを個人、コンピューター、または組織にバインドするために公開キー暗号化で使用されます。 バインドされた ID は、1 つのエンティティを別のエンティティに対して認証するために最もよく使用されます。 たとえば、証明書は、多くの場合、ユーザーに対して Web サーバーを認証し、ユーザーを Web サーバーに対して認証するために使用されます。 証明書要求を作成し、発行された証明書をインストールまたはインポートできます。 証明書を証明書階層に登録することもできます。
共有証明書ストア
WinUI アプリでは、Windows 8 で導入された新しい分離主義アプリケーション モデルが使用されます。 このモデルでは、アプリはアプリ コンテナーと呼ばれる低レベルのオペレーティング システム コンストラクトで実行されます。これにより、明示的に許可されない限り、アプリはリソースやファイルにそれ以外でアクセスできなくなります。 次のセクションでは、これが公開キー 基盤 (PKI) に与える影響について説明します。
アプリ コンテナーごとの証明書ストレージ
特定のアプリ コンテナーで使用することを目的とした証明書は、ユーザーごと、アプリ コンテナーの場所ごとに格納されます。 アプリ コンテナーで実行されているアプリは、独自の証明書ストレージにのみ書き込みアクセスできます。 アプリケーションがいずれかのストアに証明書を追加した場合、これらの証明書を他のアプリが読み取ることはできません。 アプリがアンインストールされると、それに固有の証明書も削除されます。 アプリには、MY ストアと REQUEST ストア以外のローカル コンピューター証明書ストアへの読み取りアクセス権もあります。
キャッシュ
各アプリ コンテナーには、検証、証明書失効リスト (CRL)、オンライン証明書状態プロトコル (OCSP) 応答に必要な発行者証明書を格納できる分離キャッシュがあります。
共有証明書とキー
スマート カードがリーダーに挿入されると、カードに含まれる証明書とキーがユーザーの MY ストアに伝達され、ユーザーが実行している完全信頼アプリケーションで共有できます。 ただし、既定では、アプリ コンテナーはユーザーごとの MY ストアにアクセスできません。
この問題に対処し、プリンシパルのグループがリソースのグループにアクセスできるようにするには、アプリ コンテナー分離モデルで機能の概念がサポートされています。 機能により、アプリ コンテナー プロセスは特定のリソースにアクセスできます。 sharedUserCertificates 機能は、ユーザーの MY ストアとスマート カードの信頼されたルート ストアに含まれる証明書とキーへの読み取りアクセス権をアプリ コンテナーに付与します。 この機能では、ユーザー REQUEST ストアへの読み取りアクセスは許可されません。
次の例に示すように、マニフェストで sharedUserCertificates 機能を指定します。
<Capabilities>
<Capability Name="sharedUserCertificates" />
</Capabilities>
証明書フィールド
X.509 公開キー証明書の標準は、時間の経過と同時に改訂されました。 次の図に示すように、データ構造の連続する各バージョンでは、以前のバージョンに存在していたフィールドが保持され、さらに追加されています。
CertificateRequestProperties クラスを使用して証明書要求を作成するときに、これらのフィールドと拡張機能の一部を直接指定できます。 ほとんどの場合、できません。 これらのフィールドは、発行元が入力することも、空白のままにすることもできます。 フィールドの詳細については、次のセクションを参照してください。
バージョン 1 のフィールド
| フィールド | 説明 |
|---|---|
| バージョン | エンコードされた証明書のバージョン番号を指定します。 現在、このフィールドで使用できる値は 0、1、または 2 です。 |
| シリアル番号 | 証明機関 (CA) によって証明書に割り当てられた正の一意の整数が含まれています。 |
| 署名アルゴリズム | CA が証明書に署名するために使用するアルゴリズムを指定するオブジェクト識別子 (OID) が含まれています。 たとえば、1.2.840.113549.1.1.5 では、SHA-1 ハッシュ アルゴリズムと RSA ラボラトリーの RSA 暗号化アルゴリズムを組み合わせて指定します。 |
| 発行者 | 証明書を作成して署名した CA の X.500 識別名 (DN) が含まれます。 |
| 有効性 | 証明書が有効な期間を指定します。 2049 年末までの日付は、協定世界時 (グリニッジ標準時) 形式 (yymmddhhmmssz) を使用します。 2050 年 1 月 1 日以降の日付は、一般化された時刻形式 (yyyymmddhhmmssz) を使用します。 |
| サブジェクト | 証明書に含まれる公開キーに関連付けられているエンティティの X.500 識別名が含まれています。 |
| 公開キー | 公開キーと関連するアルゴリズム情報を格納します。 |
バージョン 2 のフィールド
X.509 バージョン 2 証明書には、バージョン 1 で定義されている基本フィールドが含まれており、次のフィールドが追加されます。
| フィールド | 説明 |
|---|---|
| 発行者の一意識別子 | CA の X.500 名を一定期間にわたって異なるエンティティで再利用するときに明確にするために使用できる一意の値が含まれています。 |
| サブジェクトの一意識別子 | 証明書サブジェクトの X.500 名を時間の経過と同時に異なるエンティティで再利用するときに明確にするために使用できる一意の値が含まれています。 |
バージョン 3 の拡張機能
X.509 バージョン 3 の証明書には、バージョン 1 とバージョン 2 で定義されているフィールドが含まれており、証明書の拡張子が追加されます。
| フィールド | 説明 |
|---|---|
| 認証機関キー識別子 | 証明書の署名に使用される CA 秘密キーに対応する証明機関 (CA) 公開キーを識別します。 |
| 基本的な制約 | エンティティを CA として使用できるかどうかを指定し、使用できる場合は、証明書チェーン内の下位 CA の下に存在できる CA の数を指定します。 |
| 証明書ポリシー | 証明書が発行されたポリシーと、証明書を使用できる目的を指定します。 |
| CRL 配布ポイント | 基本証明書失効リスト (CRL) の URI を格納します。 |
| 拡張キー使用法 | 証明書に含まれる公開キーを使用できる方法を指定します。 |
| 発行者の別名 | 証明書要求を発行する主体のための 1 つ以上の代替名形式を指定します。 |
| キーの使用法 | 証明書に含まれる公開キーによって実行できる操作の制限を指定します。 |
| 名前の制約 | 証明書階層内のすべてのサブジェクト名を配置する必要がある名前空間を指定します。 この拡張機能は、CA 証明書でのみ使用されます。 |
| ポリシーの制約 | ポリシー マッピングを禁止するか、階層内の各証明書に許容可能なポリシー識別子が含まれていることを要求することで、パスの検証を制限します。 この拡張機能は、CA 証明書でのみ使用されます。 |
| ポリシー マッピング | 発行元 CA のポリシーに対応する下位 CA のポリシーを指定します。 |
| 秘密キーの使用期間 | 秘密キーに対して、秘密キーが関連付けられている証明書とは異なる有効期間を指定します。 |
| サブジェクトの別名 | 証明書要求のサブジェクトの 1 つ以上の別名フォームを指定します。 代替フォームの例としては、電子メール アドレス、DNS 名、IP アドレス、URI などがあります。 |
| サブジェクト ディレクトリ属性 | 証明書のサブジェクトの国籍などの識別属性を伝えます。 拡張値は、OID と値のペアのシーケンスです。 |
| サブジェクト キー識別子 | 証明書のサブジェクトによって保持されている複数の公開キーを区別します。 通常、拡張値はキーの SHA-1 ハッシュです。 |
Windows developer