Возможно ли, чтобы apache запрашивал пароль только в том случае, если у пользователя не установлен клиентский сертификат?
Я почти уверен, что это возможно, но нигде не могу найти никаких подтверждений.
Можно ли настроить apache таким образом:
Если у пользователя будет клиентский сертификат - apache разрешит подключение к веб-странице без каких-либо проблем или вопросов. Если пользовательский сертификат на стороне клиента не будет доступен, он запросит базовую аутентификацию - значит, он запросит пароль?
Как это настроить? Я борюсь с этим с утра без какого-либо решения, даже чтобы просто придерживаться этого.
Вот сценарий для получения записей для файла паролей из сертификатов: (см. Также https://serverfault.com/posts/747107)
В .fakehttpsauth вам нужно поместить такие записи, как:
/C=US/ST=CA/O=Doe Inc/CN=John Doe/emailAddress=john@doe.com:xxj31ZMTZzkVA
Вот сценарий для создания таких записей из ваших сертификатов:
#!/bin/bash
# export the certificates in fake auth format
# see https://serverfault.com/questions/533639/apache-authentication-with-ssl-certificate-and-sslusername
# WF 2016-01-06
fakepass=`openssl passwd -crypt -salt xx password`
for c in *.crt
do
openssl x509 -in $c -text | grep Subject: | gawk -v fakepass=$fakepass '
BEGIN { FS="," }
{
gsub("Subject: ","",$0)
for (i=1;i<=NF;i++) {
f=trim($i)
printf("/%s",f);
}
printf(":%s\n",fakepass);
}
# see https://gist.github.com/andrewrcollins/1592991
function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }
'
done