Comment puis-je faire que Apache request un certificate SSL client sans avoir besoin de le vérifier contre une autorité de certificateion connue?

J'utilise apache2 (2.2.3) pour desservir un site où j'aimerais que les clients s'authentifient avec des certificates. Puisque je dois seulement vérifier qu'un user présentant un certificate particulier est le même user qui a présenté ce certificate dans le passé, l'autorité de certificateion qui a signé le certificate n'est pas pertinente. Il semble toutefois que l'utilisation de SSLVerifyClient require nécessite SSLCACertificateFile ... (ou SSLCACertificatePath ... ), puis apache n'acceptera que les certificates signés par une autorité de certificateion dans ce file / path d'access. Existe-t-il un moyen d'get que Apache accepte un certificate de client, quel que soit l'autorité de certificateion de sortie / chant? (c.-à-d. vérifier que le client possède la key privée correspondante à la key publique présentée, mais pas la peine de vérifier la CA d'émission / signature)

2 Solutions collect form web for “Comment puis-je faire que Apache request un certificate SSL client sans avoir besoin de le vérifier contre une autorité de certificateion connue?”

Comme vous l'avez trouvé, vous pouvez désactiver la vérification du certificate au niveau de saisie SSL / TLS dans Apache Httpd en utilisant SSLVerifyCLient optional_no_ca .

Le deuxième problème que vous allez faire face à ce que vous essayez de faire est d'amener le client à envoyer le certificate. Étant donné que votre certificate n'est pas destiné à être dans une PKI, ils pourraient être auto-signés et avoir divers émetteurs.

Lors de la request d'un certificate client, le server envoie un message TLR CertificateRequest au client pendant le handhsake. Ce message contient la list certificatee_authorities :

Une list des noms distinctifs des autorités de certificateion acceptables. Ces noms distincts peuvent spécifier un nom distinctif souhaité pour une autorité de certificateion racine ou pour une autorité de certificateion subordonnée; Ainsi, ce message peut être utilisé pour décrire les racines connues et un espace d'autorisation souhaité. Si la list certificatee_authorities est vide, le client PEUT envoyer un certificate du type ClientCertificate approprié, à less qu'il y ait un arrangement externe contraire.

Les browsers utilisent ceci pour choisir le certificate client à envoyer (le cas échéant).

(Notez que la partie de la list vide est uniquement dans la spécification de TLS 1.1. SSL 3.0 et TLS 1.0 sont silencieux sur ceci, et en pratique, cela fonctionnera également).

Vous obtenez deux options pour cela.

  • Si les certificates de clients que vous prévoyez seront auto-signés, ils auront tous des émetteurs différents. Parce que vous ne saurez pas à quoi vous attendre, le server devra envoyer une list vide. Pour ce faire, utilisez la directive SSLCADNRequestFile et SSLCADNRequestFile -le dans un file contenant uniquement une ligne vide (si je me souviens bien, cela ne fonctionne pas avec un file complètement vide).

  • La deuxième option (less propre). Est-ce que vous acceptez un DN d'émetteur commun à tous les certificates de clients que vous prévoyez, qu'ils aient ou non été délivrés par ce certificate de CA (ou que cette CA existe ou non). Ce faisant, vous allez rompre considérablement le model PKI (plus).

    Si vous acceptez un DN d'émetteur comme CN=Dummy CA (par exemple). Toute personne peut build un certificate auto-signé en utilisant CN=Dummy CA comme DN du sujet (et DN émetteur), éventuellement avec différentes keys. Bien que la directive SSLCADNRequestFile s'attend à être configurée avec des certificates pour créer la list, elle n'est pas utilisée pour vérifier le certificate client, c'est simplement une configuration compliquée (mais naturel dans le context des autres directives) de la configuration de la list des permissions de certificatee_authorities . Si vous, en tant que service, met un certificate autonome avec ces noms dans SSLCADNRequestFile , cela fera que le message SSLCADNRequestFile CertificateRequest utilise CN=Dummy CA dans la list certificatee_authorities (ce ne sont que des noms, pas certs à ce stade). Le client pourra ensuite retirer son propre certificate avec le DN de l'émetteur CN=Dummy CA , que sa signature soit ou non vérifiée par ce certificate (même key) ou non, car aucune vérification de signature n'est impliquée dans ces étapes de toute façon.

Ceci étant dit, n'oubliez pas qu'avec SSLVerifyCLient optional_no_ca , aucune vérification de certificate réel n'est faite (je suppose que vous pouvez vérifier la variable SSL_CLIENT_VERIFY si votre vérification manuelle n'est qu'une solution de recharge à une PKI que vous avez configurée de toute façon). Tout ce que vous savez à ce stade, c'est que le client a la key privée pour le certificate de key publique qu'il a présenté (garanti par le message TLS CertificateVerify ): vous devrez effectuer une forme de vérification si vous voulez qu'il y ait authentification de une sorte. (Vous ne pouvez pas faire confiance au contenu du certificate, c'est l'un des liens entre sa key publique et les noms / attributes qu'il contient.)

Cela ne fonctionnera pas bien pour les files, mais vous pouvez le faire pour une application (p. Ex. PHP / CGI / … même Java si vous passez le certificate au server Java proxié). Une façon simple serait d'avoir une list pré-connue de keys publiques, ou vous pouvez regarder les idées dans FOAF + SSL / WebID .

L'utilisation de SSLVerifyCLient optional_no_ca (au lieu de require ) provoque que apache ne vérifie pas l'autorité de certificateion émetteur (et ne nécessite donc pas de file ou de path de certificateion CA). Il permet au client / user de ne pas soumettre de certificate, de sorte qu'il est nécessaire d'effectuer un certificate pour qu'il soit nécessaire d'effectuer un certificate séparément.

(Apparemment, je n'ai tout simplement pas bien lu la documentation mod_ssl .)

  • Exécutez 2 sites IIS séparés, avec des certificates SSL séparés sur le même server
  • Comment puis-je configurer le SSL pour une utilisation avec plusieurs instances du server Amazon EC2 derrière un équilibreur de charge?
  • Exchange 2007 Nouveau certificate SSL Breaks Iphone access
  • SSL - Est-ce que je devrais tout mon site sécurisé?
  • Apache SSL ne fonctionne pas
  • Désactiver SSLv3 sur Windows Server 2012
  • Doit-on avoir des fournisseurs SSL Cert? [fermé]
  • Différences entre IE6 et plus tard en ce qui concerne la manipulation HTTPS
  • Consommation de bande passante sur VPN + SSL
  • Comment activer TLS pour SMTP dans II6 sur Windows Server 2012 R2
  • Didacticiel pour l'hébergement virtuel basé sur IP
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.