次のようなモジュール式システムがあるシナリオを想定します。
インターネットユーザーのユーザー名とパスワードを取得し、ユーザーにトークンを発行する認証モジュール(AM)。ユーザー<-> AM通信はTLSによって保護されており、AMには既知の認証局からの証明書があります。
ユーザーからの{Token、Request}を受け入れ、AMを使用してトークンを検証し、リクエストを処理するいくつかのサービス。各サービスは独立したサーバーに実装されています。
トークンは無記名トークンです。ユーザーサービス通信でTLSを有効にする場合、中間者攻撃が不可能であり、トークンが機密のままであることを確認するために、各(サービス)サーバーの証明書を取得する必要がありますか?
はい
サーバーが証明書を提示しない(または検証しない)場合、クライアントは想定されるサーバーに{Token、Request}を喜んで与えます。 MITMはサーバーとして機能し、トークンとリクエストを受け取り、それらを実サーバーに渡すことができます。
ただし、パブリックCAによって署名される必要はありません。自分のPKI(これらの証明書に署名するためのプライベートCA)を使用していると、生活が楽になります。
ユーザーがサーバーと通信しているとき、ユーザーは、真ん中の攻撃者の男性ではなく、実際にサービスに話していることを確認する必要があります。これは通常、証明書を使用して行われます。通常のwebpki証明書(Let's Encryptなど)を使用するのが最も便利ですが、使用できない場合は、固定された自己署名証明書を使用するか、サービスに証明書を発行する独自のCAを使用できます。これはすべて、クライアントの構成をどのように管理するかによって異なります。クライアントは、信頼するキーを知る必要があり、そのキーをローテーションする必要がある場合は更新する必要があります。