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>

有什么方法可以在 Apache 中配置它,将整个证书转发到 Tomcat 服务器?我知道我可以使用ajp,但试图在没有这种方法的情况下完成它。

4

1 回答 1

9

如果您将证书作为标头传递,tomcat 不会自动意识到它,因为连接只是 HTTP 而不是 HTTPS。您不必将证书作为请求属性获取,而是必须从标头中提取并自行解析。

您可以覆盖中的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 回答