首页 文章

使用php_curl转发SSL客户端证书

提问于
浏览
1

我有以下设置:

有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'];

但那些没有运气 .

1 回答

  • 2

    您无法使用原始客户端证书传递请求,除非您拥有带密钥等证书 . 这就是SSL的工作原理 .

    如果您正在运行这两个服务器,则可以验证Server1上的客户端证书,并通过自定义标头或您认为最适合的标头在Server2上传递验证信息 .

    如果你不对第二台服务器负责,那么,没有运气,因为使MITM攻击变得简单并不是SSL创建者的意图之一 .

相关问题