3 votes

Combinaison certificat SSL Apache et Basic Auth - mot de passe si pas de certificat

Est-il possible de forcer apache à demander le mot de passe uniquement si l'utilisateur n'a pas de certificat-client installé ?

Je suis presque sûr que c'est possible, mais je ne trouve aucune confirmation nulle part.

Est-il possible de configurer Apache pour qu'il agisse de la sorte ?

Si l'utilisateur dispose d'un certificat client, Apache autorisera la connexion à la page Web sans aucun problème ni question. Si le certificat de l'utilisateur n'est pas disponible côté client, il demandera une authentification de base - il demandera donc un mot de passe ?

Comment le configurer ? Je me bats contre ça depuis ce matin sans aucune solution même pour s'en tenir à ça.

0 votes

Vous avez bien lu le manuel et surtout le SSLOptions +FakeBasicAuth section ?

0 votes

Bien sûr que je l'ai fait ;) Mais je ne suis pas sûr d'avoir bien compris. Voici quelque chose que j'ai essayé : [lien] httpd.apache.org/docs/trunk/ssl/ssl_howto.html#certauthenticate Mais cela ne fonctionne pas comme je le souhaite. 1. Il demande un certificat. S'il n'y a pas de certificat, l'accès n'est pas accordé. Si je donne le certificat - l'accès est accordé et l'authentification de base est déclenchée en demandant le login et le mot de passe. Mais il n'accepte pas le mot de passe que j'ai créé dans le fichier avec htpasswd, au lieu de cela il essaie de valider l'utilisateur créé à partir des données du certificat. J'ai essayé de créer un tel utilisateur manuellement, mais cela ne fonctionne pas non plus. Je suis donc bloqué ;)

0 votes

Une fois de plus, ce dont j'ai besoin est : si le certificat est fourni, l'accès est accordé. Si le certificat est absent, il faut demander le mot de passe, et s'il est validé, l'accès est accordé. Pour l'instant, le mot de passe est demandé après la validation du certificat. J'ai essayé avec SSLRequire optional

1voto

Wolfgang Fahl Points 555

Voici un script pour récupérer les entrées du fichier des mots de passe à partir des certificats : (voir aussi https://serverfault.com/posts/747107 )

Dans le .fakehttpsauth vous devez mettre des entrées comme :

/C=US/ST=CA/O=Doe Inc/CN=John Doe/emailAddress=john@doe.com:xxj31ZMTZzkVA

Voici un script pour créer de telles entrées à partir de vos certificats :

#!/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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X