我有以下设置:使用php_curl转发SSL客户端证书
有2台服务器需要SSL客户端证书。 证书用于身份验证。
用户(使用他的浏览器)将使用他的客户端证书向Server1发出请求。 到目前为止,这么好。 现在,我想要做的事情: Server1将向Server2发出请求,解析该响应并将其返回给用户。
Server1使用php_curl执行请求。 我希望Server1将(用户的)原始客户端证书传递给Server2(它将验证用户,..)。 Server1然后发布'代表'该用户。
这可能吗?
Apache已启用ExportCertData SSLOption。 我已经尝试下面的标题添加到卷曲选项(搞清楚这是大致相同的Apache代理设置与客户端证书):
$headers[] = "SSL_CLIENT_S_DN: ".$_SERVER['SSL_CLIENT_S_DN'];
$headers[] = "SSL_CLIENT_I_DN: ".$_SERVER['SSL_CLIENT_I_DN'];
$headers[] = "SSL_SERVER_S_DN_OU: ".$_SERVER['SSL_SERVER_S_DN_OU'];
$headers[] = "SSL_CLIENT_VERIFY: ".$_SERVER['SSL_CLIENT_VERIFY'];
$headers[] = "SSL_CLIENT_V_START: ".$_SERVER['SSL_CLIENT_V_START'];
$headers[] = "SSL_CLIENT_V_END: ".$_SERVER['SSL_CLIENT_V_END'];
$headers[] = "SSL_CLIENT_M_VERSION: ".$_SERVER['SSL_CLIENT_M_VERSION'];
$headers[] = "SSL_CLIENT_M_SERIAL: ".$_SERVER['SSL_CLIENT_M_SERIAL'];
$headers[] = "SSL_CLIENT_CERT: ".$_SERVER['SSL_CLIENT_CERT'];
$headers[] = "SSL_CLIENT_VERIFY: ".$_SERVER['SSL_CLIENT_VERIFY'];
$headers[] = "SSL_SERVER_M_VERSION: ".$_SERVER['SSL_SERVER_M_VERSION'];
$headers[] = "SSL_SERVER_I_DN: ".$_SERVER['SSL_SERVER_I_DN'];
$headers[] = "SSL_SERVER_CERT: ".$_SERVER['SSL_SERVER_CERT'];
,但与那些没有运气。
IIRC SSL是端到端的,你不能代理它。 – hakre
Apache可以在SSL连接上进行代理。另外,我可以设置新的SSL连接,只需使用相同的证书,或者这是不可能的?我不太想要代理请求,我正在做另一个请求,只是具有相同的证书。 – kclement
客户端证书?然后他们不会再按预期工作了。您应该尝试在中间人攻击客户端连接以使其更透明。 – hakre