Форвард SSL-сертификат клиента с использованием php_curl - PullRequest
1 голос
/ 16 сентября 2011

У меня есть следующие настройки:

Есть 2 сервера, для которых требуется сертификат клиента SSL.Сертификат используется для аутентификации.

Пользователь (используя свой браузер) сделает запрос к Server1 со своим клиентским сертификатом.Все идет нормально.Теперь, что я хочу сделать: Server1 сделает запрос к Server2, проанализирует этот ответ и вернет его пользователю.

Server1 сделает запрос с php_curl.Я хочу, чтобы Server1 передавал исходный клиентский сертификат (пользователя) на Server2 (который проверит пользователя, ..).Сервер1 затем публикует «от имени» пользователя.

Возможно ли это?

В 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 голосов
/ 16 сентября 2011

Вы не можете передать запрос с оригинальным клиентским сертификатом, если у вас нет этого сертификата с ключами и тому подобным. Вот как работает SSL.

Если вы используете оба сервера, вы можете проверить сертификат клиента на Server1 и передать проверенную информацию на Server2 с помощью пользовательских заголовков или того, что вам больше подходит.

Если вы не несете ответственности за второй сервер, то вам не повезло, потому что упрощение MITM-атак не было целью создателей SSL.

...