5

x509 クライアント証明書 (ブラウザーにテスト証明書がインストールされています) を Apache Web サーバー (SSL) から Tomcat アプリケーションに渡そうとしています。私が現在設定している方法では、アプリケーションの春のセキュリティによって証明書が見つかりません(したがって、転送されません)。

DEBUG: [http-8080-1]  org.springframework.security.web.authentication.preauth.x509.X509AuthenticationFilter - No client certificate found in request.

Apache サーバーssl.confファイルは次のように構成されています (関係のない部分は省略しています)。

LoadModule ssl_module modules/mod_ssl.so

Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl

NameVirtualHost *:443

<VirtualHost *:443>

    ...

    SSLVerifyClient require
    SSLVerifyDepth 2

    ...

    # initialize the SSL headers to a blank value to avoid http header forgeries
    RequestHeader set SSL_CLIENT_CERT ""
    RequestHeader set SSL_CLIENT_VERIFY ""

    # add whatever SSL_* variables needed to pass to web application
    RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s"
    RequestHeader set SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"

    RequestHeader add X-Forwarded-Scheme https

    ProxyPass /testcert http://127.0.0.1:8080/testcert
    ProxyPassReverse /testcert http://127.0.0.1:8080/testcert

</VirtualHost>

証明書全体が Tomcat サーバーに転送される Apache でこれを構成する方法はありますか? 私は使用できることを知っていますajpが、その方法なしでそれを成し遂げようとしていました.

4

1 に答える 1

9

証明書をヘッダーとして渡す場合、接続は HTTPS ではなく HTTP であるため、Tomcat はそれを自動的に認識しません。証明書をリクエスト属性として取得する代わりに、ヘッダーから証明書を抽出して自分で解析する必要があります。

getPreAuthenticationCredentialsでメソッドをX509AuthenticationFilterオーバーライドできます。ここには、証明書をデコードする方法を示すコードがいくつかあります。

ビーン構成

名前空間要素を削除<x509 />し、同等の Bean に置き換えます。リファレンス マニュアルには、XML 要素が作成する Bean を説明する付録があります。構成は次のようになります。

<http entry-point-ref="http403">
    <custom-filter position="PRE_AUTH_FILTER" ref="x509Filter" />
</http>

<bean id="http403" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint" />

<bean id="x509Filter" class="YourExtendedX509AuthenticaitonFilter" />
于 2013-02-05T22:40:12.880 に答える