web-dev-qa-db-ja.com

サーバー間のHTTPSクライアント証明書

ドメインを証明する証明書を持つ2つのサーバーがあるとします(例:HTTPSで使用するため)。

これらのサーバーの1つが、他のサーバーと通信するときにクライアント証明書として証明書を使用して、両方のサーバーが他のサーバーのドメイン名を特定できるようにすることはできますか?例えば。 " https://example.com "は、 " https://elsewhere.com "からのリクエストであることを確認できるため、特定のシークレットを安全に送信できますそのドメイン(以前にそのドメインを見たことがない場合でも)。

(編集:TLSには一般にクライアント認証が存在することは承知していますが、「https」PKIからの同じ証明書がクライアント証明書として使用できるかどうかに特に関心があります。たとえば、使用フラグは、それらが既存の実装で「正しく機能する」ことを防ぎます。)

4
cloudfeet

はい。 EKUで許可されている場合。

証明書内で許可されている場合は、証明書/キーをクライアント証明書として使用できます。つまり、TLS Web Client AuthenticationExtended Key Usage(EKU)セクション内で許可されている場合です。

例:example.com証明書では、実際に許可されています。 (私はそれを知りませんでした。)

$ echo -n | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -text | grep Authentication -B1
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication

広く普及しているようです。

以下の大規模なWebサイトの簡単なサンプル.

$ echo -n | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -text | grep Authentication -B1
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication

$ echo -n | openssl s_client -connect Amazon.com:443 2>/dev/null | openssl x509 -noout -text | grep Authentication -B1
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication

$ echo -n | openssl s_client -connect Microsoft.com:443 2>/dev/null | openssl x509 -noout -text | grep Authentication -B1
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication

$ echo -n | openssl s_client -connect Apple.com:443 2>/dev/null | openssl x509 -noout -text | grep Authentication -B1
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication

さらに読む:

1
StackzOfZtuff

実際には、クライアント認証を可能にするSSL/TLSの(少なくともWebでは)未使用のオプション部分がよくあります。サーバーは、クライアントが本人であるかどうかをサーバーが実際に気にしないため、通常はWebでは使用されません。適切な資格情報が必要なだけです。さらに、世界中のすべてのクライアントを特定のコンピューター、IP、ドメインなどに検証する必要があるという悪夢を想像してみてください。どのように機能するかさえわかりません。それは、グローバルなインターネットIDカード/証明書のようなものです-私に尋ねると、かなり怖い考えです!

ウィキペディアには、きちんとしたウォークスルーがあり、クライネット認証のしくみについて説明しています: http://en.wikipedia.org/wiki/Transport_Layer_Security#Client-authenticated_TLS_handshake

これを 基本的なハンドシェイク と比較して、SSL/TLSハンドシェイクがダウンする一般的な方法を確認できます。

したがって、このシナリオではサーバーの1つがまだ「クライアント」として機能しているということを理解すれば、質問に対する答えは間違いなく「はい」です。最後の部分はセマンティクスです。

3
Gray

特定のx509証明書をクライアント認証SSL接続のクライアント側で使用できるかどうかは、発行CAによって証明書に設定されたキー使用法と拡張キー使用法のオプションによって異なります。

openssl x509 -in certfile.pem -textを使用してx509証明書を調べることができます

キー使用オプションは、デジタル署名、キーアグリーメント、EncipherOnlyなど、証明書の使用が許可されているさまざまな操作を参照します。

拡張キー使用法オプションは通常、サーバー認証(SSLサーバーに使用するもの)、クライアント認証(SSLクライアントに使用するもの)、コード署名、および他のホストなどのより高レベルの操作を指します。

サーバー認証とクライアント認証の両方の拡張キー使用法オプションがあるx509証明書がある場合は、両方の役割で機能することを確信できます。 Key Usageオプションしかない場合は、実験する必要があるかもしれません。

オプションのより完全なリストは rfc 528 のセクション4.2.1.3および4.2.1.12にあります。

0
Leland Wallace