Назад | Перейти на главную страницу

Комбинация SSL-сертификата Apache и базовой аутентификации - пароль при отсутствии сертификата

Возможно ли, чтобы 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