web-dev-qa-db-ja.com

ApacheSSL証明書と基本認証の組み合わせ-証明書がない場合のパスワード

ユーザーがクライアント証明書をインストールしていない場合にのみ、Apacheにパスワードの要求を強制することは可能ですか?

これは可能であるとほぼ確信していますが、どこにも確認が見つかりません。

次のように動作するようにApacheを構成することは可能ですか?

ユーザーがクライアント証明書を持っている場合-Apacheは、問題や質問なしにWebページへの接続を許可します。クライアント側のユーザー証明書が利用できない場合は、基本認証認証を要求するので、パスワードを要求しますか?

それを構成する方法は?私は朝からこれに固執するだけでも解決策なしでこれと戦っています。

3
Lisek

証明書からパスワードファイルのエントリを取得するためのスクリプトは次のとおりです( https://serverfault.com/posts/747107 も参照)

.fakehttpsauthに、次のようなエントリを配置する必要があります。

/C=US/ST=CA/O=Doe Inc/CN=John Doe/[email protected]: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
1
Wolfgang Fahl