我有以下設置:使用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