是否让Apache通过客户端证书作为应用服务器的标头,而无需在浏览器中请求?

时间:2019-04-05 09:54:55

标签: apache ssl mod-ssl

HTTPD新手提出的问题。因此,我们有一个Apache HTTP服务器(2.4.38)作为SSL终止代理,通过AJP将请求转发到Apache Tomcat。要求是在没有任何验证的情况下在请求标头中传递客户端证书(它们看起来很复杂,因此是在应用服务器上执行的。)

这很简单,并且类似Apache配置中的以下内容:

SSLVerifyClient optional_no_ca
SetEnvIf ^X-SSL-certificate$ .+ X_SSL_CERTIFICATE_HEADER_PRESENT
RequestHeader set X-SSL-certificate "%{SSL_CLIENT_CERT}s" env=!X_SSL_CERTIFICATE_HEADER_PRESENT

现在,我们还有一个Swagger UI网页,允许您使用REST API进行播放(即实际上正在执行来自浏览器的相同REST API请求)。但是,使用上述配置,浏览器将不断显示“选择证书”弹出窗口,我们希望避免此弹出窗口,因为他的实际证书在这里无关紧要-如果应用程序服务器上看到的是来自Swagger UI(通过分析REFERER标头,这不是很可靠的解决方案,我同意。)

我唯一能找到的解决方案就是添加

SSLCACertificateFile conf/ssl/server.crt

具有伪造的CA,没有人可以将其用作发行者证书(在这种情况下,这是Apache随附的默认证书)。 AFAIU SSLCADNRequestFile 应该在这里有所帮助,但是以某种方式它根本没有效果...因此,您仍然可以从例如邮递员,但浏览器不会显示弹出窗口,因为您没有合适的证书。

最终的问题是,如何实现正确的方法?显然,使用伪造的SSLCACertificateFile的丑陋解决方法不应该是IHMO ...

更新#1

好吧,它最终演变为以下内容:

SSLVerifyClient none
SSLOptions +ExportCertData

RequestHeader set X-SSL-certificate ""

<Location ~ "/app-url">
    <If "%{HTTP_REFERER} !~ /swagger-ui\.html/">
        SSLVerifyClient optional_no_ca
        RequestHeader set X-SSL-certificate "%{SSL_CLIENT_CERT}e"
    </If>
</Location>

仍然看起来朴实的恕我直言,但至少不是那么难看。 尽管人们说它不适用于TLS 1.3 ...

0 个答案:

没有答案