web-dev-qa-db-ja.com

クライアント認証はhttpsでどのように機能しますか?

最近、サードパーティのサービスを呼び出していくつかの作業を実行するアプリケーションを作成しました。このサードパーティのサービスでは、クライアント証明書を使用して、呼び出し元のクライアントを認証する必要があります。このために、.NETが提供するC#メソッドを使用してこれを実行しました(要求でクライアント証明書に "client.pfx"を追加)。

私の懸念の1つは、このサードパーティのAPIが、認証プロセスの一部として提供したURIを使用してこの安全な呼び出しを実行する必要があることを言及していることです。攻撃者が任意のURLを提供し、リクエスト自体を受信し、さらにはclient.pfxのコンテンツを受信する可能性があるため、私にはこれはひどいようです。

私の質問は、このクライアント認証はどのように機能するのですか(一種の広い観点から)?証明書全体がリクエストの一部として送信されますか?それはclient.pfxの秘密鍵で署名されたリクエストの署名ですか?私の心配が正当化されるかどうか私は思っています。

ありがとう!

1
TheTFo

クライアント証明書を使用したクライアントの認証は、サーバー証明書を使用したサーバーの一般的な認証とよく似ています。

基本的に、クライアントには公開鍵を含む公開証明書があり、クライアントには一致する秘密鍵があります。次に、クライアントによって認証が行われます。

サーバーは、クライアント証明書に含まれている公開鍵を使用して、クライアントによって作成された署名を検証できます。サーバーは、通常の方法で証明書自体も検証します。つまり、ローカルで信頼されたCA証明書に証明書チェーンを構築できるかどうかを確認し、有効期限、失効、キーの使用法などを確認します。

後で同じ署名が再生されるのを防ぐために、クライアントは署名するデータを選択できませんが、現在のTLSハンドシェイクでこれまでに送受信されたすべてのデータは署名され、サーバーからのランダムデータも含まれます。

3
Steffen Ullrich