【发布时间】:2011-09-16 10:11:24
【问题描述】:
我有以下设置:
有 2 台服务器需要 SSL 客户端证书。 该证书用于身份验证。
用户(使用他的浏览器)将使用他的客户端证书向 Server1 发出请求。 到目前为止,一切都很好。 现在,我想做的是: Server1 将向 Server2 发出请求,解析该响应,并将其返回给用户。
Server1 使用 php_curl 执行请求。 我希望 Server1 将(用户的)原始客户端证书传递给 Server2(它将验证用户,..)。 Server1 然后“代表”用户发布。
这可能吗?
Apache 已启用 ExportCertData SSLOption。 我已经尝试将以下标头添加到 curl 选项(认为这与使用客户端证书的 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 是端到端的,你不能代理它。
-
Apache 可以在 SSL 连接上做代理。另外,我可以使用相同的证书设置新的 SSL 连接,还是不可能?我也不太想代理请求,我正在做另一个请求,只是使用相同的证书..
-
客户端证书?然后他们将不再按预期工作。您应该尝试在中间人攻击客户端连接以使其更加透明。
标签: php curl openssl client-certificates