Erreur de vérification du certificat SSL Client: (27: Le certificat ne fait pas confiance)

J'ai eu la difficulté d'authentification nginx Lorsque vous utilisez CA intermédiaire (Créé seul).

Bien que le même jeu de certificats (Intermédiaire + Certificats root dans un fichier .pem) fonctionne bien pour l'authentification des clients dans IMAP (dovecot) et SMTP (postfix), Je ne peux tout simplement pas faire fonctionner avec nginx. Au lieu de cela, je reçois l'erreur suivante:

[info] 23383#23383: *14583139 client SSL certificate verify error: (27:certificate not trusted) while reading client request headers, client: 82.39.81.156, server: <hostname>, request: "GET /mailboxes HTTP/1.1", host: "<hostname>"

Pour autant que je sache, tapez erreur 27 de openssl - c'est

X509_V_ERR_CERT_UNTRUSTED

, Ou une sorte de problème avec un certificat qui n'est pas fiable dans un but spécifique, mais je ne peux pas l'expliquer plus en détail.

Il semble que les certificats individuels et combinés soient vérifiés correctement par

openssl verify

(Je peux vérifier les certificats clients par un lien intermédiaire ou un package, et le certificat intermédiaire est vérifié pour la conformité avec le certificat racine, c'est-à-dire que tout cela est vraiment dans toutes les combinaisons que je peux trouver).

Mes centres de certification racine et intermédiaire doivent être configurés avec les extensions correctes pour vérifier mes certificats clients, l'échantillon correspondant de mon utilisateur.

openssl.conf

déposer:

[ v3_ca ]
# Extensions for a typical CA (`man x509v3_config`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

[ v3_intermediate_ca ]
# Extensions for a typical intermediate CA (`man x509v3_config`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

Pendant ce temps, les certificats clients que je délivrés sont configurés pour fonctionner à la fois pour l'authentification client et le cryptage. / Signatures de courrier électronique comme suit:

[ user_cert ]
# Extensions for client certificates (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = client, email
nsComment = "OpenSSL Generated Client Certificate"
subjectAltName = email:move
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = critical, clientAuth, emailProtection

(En effet, s'ils n'étaient pas installés correctement, Safari et Mail OS X ne me permettrait pas de les envoyer parce qu'ils sont généralement très stricts).

Pour plusieurs questions similaires, installation recommandée

ssl_verify_depth

au sens 2 (Vérifier les certificats intermédiaires et racines), Mais cela ne semble pas aider.
</hostname></hostname>
Invité:

Catherine

Confirmation de:

J'ai la même installation et j'ai essayé de diagnostiquer ce problème particulier. Les certificats ont fonctionné bien sur la copie apache, Mais le problème était avec nginx. C'est une solution que je suis arrivée.

Spécifiez votre propre

ssl_client_certificate

Dans votre certificat racine. Pas votre lien intermédiaire. Ensuite, assurez-vous que nginx Vérifications de la profondeur 2. J'ai essayé d'utiliser le fichier de chaîne de certificat comme paramètre pour le certificat client, mais cela n'a toujours pas fonctionné. Je ne comprends pas pourquoi ça

Il a

Soyez root et non un certificat intermédiaire signé. Mais ça marche.

Pour une exhaustivité, c'est ce que ressemblent les parties correspondantes de ma configuration nginx:

server {
listen 8443 ssl;
server_name www.example.com;

ssl on;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.key;
ssl_client_certificate /path/to/root.ca.cert;
ssl_verify_client on;
ssl_verify_depth 2;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers <snipped-for-length>;
}

</snipped-for-length>

Pour répondre aux questions, connectez-vous ou registre