Я пытаюсь запросить, чтобы браузер отправил установленный сертификат p12 для проверки подлинности программно.
Сертификат генерируется по мере необходимости следующим фрагментом:
$res = \openssl_pkey_new(Config\authentication_key_options());
\openssl_pkey_export($res, $private);
$public = \openssl_pkey_get_details($res);
$public = $pubKey["key"];
# Generate the x509 cert
$csr = \openssl_csr_new(Config\authentication_dn(), $private);
$x509 = \openssl_csr_sign($csr, null, $private, Config\AUTHENTICATION_CERT_VALID_FOR);
# Generate the pcks12
\openssl_pkcs12_export($x509, $p12, $private, null);
Сгенерированный сертификат затем отправляется в браузер клиента для загрузки, а закрытый ключ сохраняется на стороне сервера для дальнейшего использования.
Я добавил следующее в конфигурацию apache:
SSLVerifyClient optional_no_ca
SSLVerifyDepth 10
SSLOptions +ExportCertData +StdEnvVars
Когда этого не произошло, я попытался, чтобы мой тестовый скрипт отправил заголовок 401, но безрезультатно. Добавление опций WWW-Authenticate, как и следовало ожидать, было одинаково неудачным:
header("HTTP/1.0 401");
header("WWW-Authenticate: Basic");
header("WWW-Authenticate: transport mode=\"tls-client-certificate\"");
Итак, что я должен добавить к программному (НЕ статически через конфиги apache) запросу на стороне браузера?
После прочтения кажется, что это просто невозможно.
Вернуться к чертежной доске я иду
Что я знаю
SSLVerifyClient require