2012-11-14 8 views
5

Comment puis-je configurer Apache httpd pour approuver des certificats clients spécifiques?Apache httpd: Comment faire confiance à des certificats clients spécifiques?

Nous devons restreindre l'accès à un service Web aux serveurs d'un partenaire spécifique (connu).
Nous avions prévu d'utiliser une solution basée sur l'autorité de certification pour cela (une autorité de certification de confiance qui ne signerait que des CSR dignes de confiance lorsque nous les accepterions); Cependant, l'autorité de certification de notre société ne créera pas de certificats pour les sociétés externes.

Afin d'établir la connexion sécurisée de toute façon, jusqu'à ce que l'infrastructure à clé publique requise soit prête, nous avons voulu configurer des certificats clients spécifiques comme fiables sur notre proxy httpd Apache. Mais httpd n'accepte pas les connexions des clients qui tentent de se connecter en utilisant le certificat client qui a été ajouté au CACertificateFile (certificats x509 concaténés codés en Base64 et au format DER (PEM)), configuré pour l'hôte virtuel.

Le certificat client n'est dans ce cas pas un certificat auto-signé.

Répondre

4

Vous devez configurer les certificats de CA vous faites confiance via SSLCACertificateFile ou SSLCACertificatePath et utiliser SSLVerifyClient (optional ou required, non optional_no_ca, qui n'effectuer aucune authentification) pour faire la demande de serveur un certificat client.

Si vous utilisez SSLVerifyClient directement dans votre section VirtualHost, le certificat client sera envoyé lors de la prise de contact initiale. Si vous le placez dans un Directory/.htaccess, le certificat client sera renégocié.

Il est plus facile de déboguer lorsque le certificat est envoyé dans l'établissement de liaison initial, puisque le certificat client lui-même ne sera pas crypté. Vous devriez pouvoir le voir en regardant le trafic avec Wireshark (dans le message Certificate envoyé par le client). Lors du débogage, il est utile de vérifier qu'un message Certificate Request est envoyé par le serveur et qu'il consulte la liste des autorités de certification.

Une cause typique de problème serait un client qui ne reconnaît pas cette liste ou un client qui n'envoie pas ses certificats CA intermédiaires dans sa chaîne, si nécessaire.

Si vous souhaitez ensuite autoriser certains certificats plus spécifiquement, vous pouvez vérifier les variables variables SSL (par exemple SSL_CLIENT_S_DN_*) et l'utiliser dans une directive SSLRequire (voir example).

+2

Salut Bruno, nous voulons aussi autoriser certains certificats. Lorsque vous vérifiez les variables SSL, y a-t-il un moyen de vérifier l'empreinte/l'empreinte digitale du certificat? Dans notre cas, c'est la seule information que nous pouvons utiliser pour autoriser. Mais j'ai trouvé qu'il n'y a pas de telle variable. – Xilang

+2

Ou, y at-il une variable pour obtenir la clé publique du certificat? Je ne l'ai pas trouvé non plus. – Xilang

+0

Comment mettre le certificat client (qui vient via handshake SSL) dans un répertoire comme '.htaccess'? – Promod

Questions connexes