我想配置Haproxy,以便在访问特定URL时只需要客户端证书?例如:
www.test.com - 它正常进行。 www.test.com/secure - haproxy需要客户证书。
答案 0 :(得分:0)
要理解为什么这不可能直接实现,需要了解TLS(SSL)的工作原理。在发送HTTP请求之前(通过现在加密的连接),TLS会加密连接。到HAProxy知道URL时,需要客户端证书的时间已经过去了。
出于实际原因,端点(HAProxy frontend
或listen
)需要连接证书,或者不需要......但是,使用verify optional
可能可以实现你想要的。使用verify optional
表示代理将在连接时请求客户端证书,如果 ,如果证书有效,则客户端不提供证书或 ca-file
,客户端将被允许连接。无效的证书将导致断开连接。
然后,ssl_c_used
fetch可以用来拒绝那些没有提供"可选"的客户的请求。证书,早些时候。
http-request deny if { path_beg /secure } ! { ssl_c_used }
此解决方案的可行性取决于浏览器在被要求提供他们不具备的证书时的行为优雅程度 - 并且将要求所有连接的浏览器提供证书。
但是无论是在HAProxy还是在任何其他平台上,都无法完全按照完全的要求进行操作,因为根据设计,路径在TLS协商已经完成之前是未知的。