2017-05-03 3 views
6

私はSpring Securityをauthenticate using an x.509 certificateに使用していますが、ブラウザのキーストアで設定されたクライアント証明書がサーバートラストストア。それが現在取り組んでいる方法スプリングセキュリティx.509認証 - 発行者認証局に基づいて証明書を受け入れる

  • 私は、オプションとして、SSLクライアント認証を設定し(server.ssl.client-AUTH = this postのように、をしたい)している
  • 私は、サーバーを設定していますすべてのクライアント証明書を含むtrust-store。クライアントによって提示された証明書がトラストストアにある場合、相互SSL接続が作成されます。
  • サーバー側のトラストストアにクライアント証明書があると、Firefoxはクライアント側の証明書をポップアップ表示します。これを選択して相互SSL接続を確立します。
  • 私は、クライアント証明書のSubjectDNからユーザ名を抽出し、それをUserDetailsServiceと照合するようにSpring Securityを設定しました。そのユーザー名に対してUserDetailsオブジェクトが返された場合、認証プロセスは正常に完了します

問題は、サーバー側の信頼ストアからクライアント証明書を削除してもFirefoxがこのポップアップをもう開いていないことです。一方向SSL接続のみが行われます。たとえルートCA証明書がサーバーの信頼ストアに存在するとしても。

私は何をしたい:クライアントがサーバのルートCAによって発行された証明書を提示したときにルート認証局の証明書のみ

  • サーバーの信頼ストアに

    • 店は、相互SSL接続を許可信頼できるストア(クライアント証明書がサーバーの信頼ストアに存在しない場合でも)

    また、インターネット上の2つのリソースにも興味があります。 Baeldungのthis tutorialでは、X.509認証が機能するためには、すべてのクライアント証明書をサーバーの信頼ストアに格納する必要があると言われています(これは私の経験を裏付けています)。

    サーバーで検証する必要があるユーザーごとに、独自の証明書を構成済みのトラストストアにインストールする必要があります。少数のクライアントしかない小規模なアプリケーションでは、おそらく実用的かもしれませんが、クライアントの数が増えれば複雑なキー管理につながる可能性があります。

    しかし、@robinhowlettによってthis tutorial

    クライアントがサーバにそのキーストア内の証明書を提示すると、サーバは、サーバのトラストストアにCA証明書を使用してクライアント証明書のチェーンを検証することを言います。

    これは基本的に達成したいものですが、できません。

    ボトムライン:誰かがサーバーの信頼ストア内の1つのまたは複数のルートCA証明書を格納するために管理し、春のセキュリティでX.509相互SSLハンドシェイクを経由して認証するためにこれらのルートCAが発行するクライアント証明書を使用しましたか?

    私はSpringブート1.5.2.RELEASE(spring-security-web 4.2.2.RELEASE)を使用しています。私はFirefox 53で動作しているSSL認証をテストしました。

  • +1

    @dur - ありがとう、私は、デバッグを有効にするためのガイドを見つけ、上記のコメントに記載された不思議をデバッグし、http://docs.oracle.com/javase/7/docs/technotes/guides/に戻ってきます。 security/jsse/ReadDebug.html –

    +1

    問題が見つかりました - 信頼ストアは、jvmが初期化されたときに一度だけ読み込まれます。サーバーが既に稼働していて、古いバージョンがメモリに入っていたら、私は信頼ストアを変更していました。サーバーを再起動すると正常に動作します。詳細https://serverfault.com/questions/328533/can-tomcat-reload-its-ssl-certificate-without-being-restarted –

    答えて

    0

    私の問題が見つかりました - サーバーが稼働している間にトラストストアを変更していました(クライアント証明書を削除してCA証明書だけを残していました) )。しかし、トラストストアはメモリ内に保持され、JVMが初期化されるときに一度だけ読み込まれます(詳細on this ServerFault post)。したがって、トラストストアの変更は、Tomcatによって実行時に読み取られません。

    答えが簡単です:はい、CA証明書のみがトラストストアに存在する場合、SSLハンドシェイク中にサーバーがブラウザと通信し、信頼できるCAによって発行されたクライアント証明書を要求し、信頼できるCAによって発行された証明書を選択します(証明書がブラウザのキーストアに存在する場合)。

    ただし、サーバーが稼働中にサーバーをトラストストアに動的に追加すると、CAは検出されません。新しいCAは、サーバーの再起動後(およびJVMが再初期化された後)にのみ認識されます。

    関連する問題