J'ai essayé d'obtenir une connexion SSL à un serveur LDAPS (Active Directory) pour fonctionner, mais j'ai toujours des problèmes. J'ai essayé d'utiliser ceci:
openssl s_client -connect the.server.edu:3269
Avec le résultat suivant:
verify error:num=20:unable to get local issuer certificate
Je pensais, OK, et bien le serveur est un ancien serveur de production vieux de quelques années. Peut-être que l'AC n'est pas présente. J'ai ensuite extrait le certificat de la sortie dans un fichier pem et essayé:
openssl s_client -CAfile mycert.pem -connect the.server.edu:3269
Et cela n'a pas fonctionné non plus.
Qu'est-ce que je rate? Cela ne devrait-il PAS TOUJOURS fonctionner?
ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'./ca_issuer_cert.pem')
Après cela, j'ai pu utiliser STARTTLS (dans le port LDAP 389) comme prévu.Réponses:
Voici donc ce que je vois comme le nom du certificat CA:
C'était le nom du certificat que j'avais importé après avoir fait les -showcerts dans mon deuxième essai ci-dessus. J'ai répertorié les certificats dans le magasin de clés en procédant comme suit:
Je vois le certificat CA là-dedans.
Pour vous assurer que openssl utilise le magasin de clés que j'utilise avec le serveur, j'utilise l'argument -CAfile:
Sachant que le magasin de clés java pour les autorités de certification a un mot de passe, j'ai essayé d'utiliser l'option -pass pass: password comme ceci:
mais cela n'a pas fonctionné non plus.
Ce qui est drôle, c'est que le fichier cacerts a un mot de passe et openssl ne se plaint pas qu'il ne peut pas lire le fichier cacerts. Cela me semble louche. Est-ce que cela ou quelque chose d'autre vous dit quelque chose?
la source
Cette erreur est la façon dont openssl dit: "Je ne peux pas suivre la chaîne de certificats jusqu'à une racine de confiance". Je viens de faire la même commande à mes propres serveurs AD et j'obtiens une chaîne de certificats complète, mais le certificat supérieur a cette erreur exacte. Si vous avez la clé de publication de l'autorité de certification qui a signé le certificat, vous pouvez la spécifier avec les options
-CAfile
ou-CApath
la source
Si vous utilisez OpenLDAP, vous pouvez définir:
dans votre
openldap.conf
fichier, qui indique à OpenLDAP de ne pas tenter de vérifier le certificat. Il existe une option similaire si vous effectuez une authentification LDAP avec Apache.Si vous souhaitez vraiment effectuer une vérification de certificat, les éléments suivants peuvent vous aider:
Je ne pense pas. Bien que les éléments suivants puissent sembler définitifs, ce n'est vraiment que mon meilleur invité:
Ce que vous avez essayé ne fonctionnerait que pour un certificat auto-signé. Étant donné que le certificat a été réellement émis par l'autorité de certification Windows, vous essayez d'utiliser le certificat de serveur comme argument pour
-CAfile
ne rien obtenir.Pas nécessairement, non. Il n'y a aucune garantie que le serveur distant présente le certificat CA dans sa sortie. Vous devez d'abord regarder l'émetteur du certificat de serveur:
... puis voyez si l'un des autres certificats que vous avez correspond à cet émetteur.
la source