クライアント証明書認証の場合、誰がクライアント証明書を発行する必要がありますか?
APIを公開するサービスプロバイダー、またはAPIを使用するクライアントコンシューマー?
私の経験では、両方のアプローチを見てきましたが、神聖なテキストの発言を知りたいです。
通常、APIコンシューマーはCSRを生成する必要があります。これにより、証明書に対応する秘密鍵を持つ唯一の関係者がコンシューマーであると確信できます。証明書の発行は、サービスプロバイダー(サービス署名)、クライアント(自己署名)、またはサードパーティの信頼できるCA(CA署名)によって実行できます。
サービスプロバイダーがクライアントCSRを作成する場合、整合性の問題があり、複数のエンドユーザーに同じ証明書を発行する可能性があります。これは常に問題であるとは限りません。たとえば、証明書を使用してチャネルを保護し、認証のために追加の手順が実行される場合や、クライアント固有の公開鍵を転送できる最初の接続に使用される場合などですが、理想的ではありません。
同様に、サービスがクライアント証明書に信頼できるサードパーティによる署名を要求している場合、サービスがそれを生成しても機能しません-実際のエンドユーザーではなく、サードパーティの検証手順がサービスに適用されます。メリットを無効にします。ただし、サービスプロバイダーがクライアント証明書に署名することは特に珍しいことではありません。これにより、信頼できるルート証明書(独自の証明書)の非常に小さなリストを保持できるようになり、クライアントが秘密鍵を誰にも公開する必要がなくなります。代わりに、クライアントはCSRをサービスに送信し、応答として証明書を取得し、それをキーと組み合わせて使用することができます。
誰がクライアント証明書を発行する必要がありますか?
APIサービスプロバイダーによって信頼されている承認済み機関。これは、APIサービスプロバイダー自体は必要ありません(ただし、一般的です)。このタスクは、APIプロバイダーによって設定された要件に従う別のエンティティに委任される場合があります。委任されると、APIプロバイダーは、正当で適切に認証されたクライアントのみがクライアント証明書を受け取ることが保証されます。
確かに、クライアントはクライアント証明書を作成する責任がありません。
特定のケースに応じて、いくつかの一般的なシナリオがあります。
これは最も単純なアプローチです。クライアントはCSRを生成し、それをサービスプロバイダーのCAに送信します。リクエストが適切に認証および検証されると、クライアントは署名された証明書を受け取り、それを使用してAPIにアクセスします。
Pros:サービスプロバイダーは、すべての個々のクライアントとその証明書を追跡します。
短所:サービスプロバイダーは、すべてのインフラストラクチャを維持して、クライアント要求の検証を処理し、維持する必要があります(更新、再発行、取り消しなど)。クライアントエンティティが厳密に定義されていない場合、(両方の関係者にとって)顕著なオーバーヘッドが発生する可能性があります。つまり、クライアントが5つしかない場合、このアプローチは確かに優れています。サービスプロバイダーがSLAに従う必要があるため、数千の場合、これは問題になる可能性があります。
このオプションは、サービスプロバイダーとクライアント組織の両方の組織で操作可能なプライベートPKIを使用するために必要です。クライアント組織には、サービスプロバイダーへのアクセスが許可されている多数のクライアントエンティティが存在する場合があります。
Pros:サービスプロバイダー側の証明書管理コストを削減します。特に、クライアントエンティティの正確な数と名前が事前にわからない場合(たとえば、アクセスは部門単位で許可されます)。クライアント組織内で証明書のライフサイクル管理を改善できます。
短所:クライアント組織とサービスプロバイダー組織の間に信頼関係が必要です。これは、クライアント組織がクライアント証明書を誤って発行し、十分に信頼されているとは考えられない場合に穴を開けます。この質問は一般に、サードパーティの監査会社によるPKI監査を使用することで解決されます。組織間のすべての技術的および法的関係を説明する書面によるポリシーがあります。しかし、このアプローチもコストがかかります(監査、ポリシーの作成など)。
場合によっては、このシナリオは2つ以上の組織に拡大され、相互認証の数を制限するために、組織間の信頼を編成するためにブリッジCAが構築されます。
私はCrypt32の答えに同意しなければなりません。
(私はあなたが「記号」を意味することを「問題」と見なします)
これは、サービスプロバイダーとクライアントの両方から信頼されるエンティティである必要があり、サービスプロバイダーとクライアント以外の誰かotherである必要があります。
認証されたサービスプロバイダーはおそらくクライアントを信頼するため、クライアントの組織がクライアントの証明書に署名することを信頼することは不合理ではありませんが、実際には、サービスプロバイダーのライフを多数のCA証明書を維持することははるかに困難になります。
証明書の目的はエンティティを公に識別することです。そのため、クライアントがプロバイダーに証明書への署名を信頼している可能性は高いですが、これは通常、サービスプロバイダーが検証できる証明書のみを提供します。証明書が他のプロバイダーとの対話で使用された場合、元のプロバイダーがクライアントと他のプロバイダーとの対話を制御できます。
CAとしてサードパーティを使用すると、クライアントとプロバイダーの両方に保護が提供され、証明書管理に関する技術的および組織的な(契約上の)問題が、サービスに関する既存の関係から分離されます。