2013-07-11 18 views
16

Ho copiato il file PEM in/usr/local/share/ca-certificates/e ho eseguito update-ca-certificates e ho verificato che il certificato risultante è ora incluso in /etc/ssl/certs/ca-certificates.crt che è il file stampato da curl-config --ca. Ho anche verificato che il certificato stampato da openssl s_client -connect example.com:443 era identico al mio file PEM. Eppure continuo a ricevere l'errore "14090086: Routine SSL: SSL3_GET_SERVER_CERTIFICATE: verifica certificato fallita". Ciò accade anche se utilizzo l'opzione --cacert di curl come descritto in http://curl.haxx.se/docs/sslcerts.html per indicare quale certificato utilizzare.Perché il ricciolo non riconosce un certificato SSL autofirmato?

Funziona se disattivo la verifica del certificato del tutto con curl -k, ma non voglio farlo perché sto cercando di scrivere un cablaggio di test che dovrebbe verificare correttamente il protocollo SSL.

Funziona bene se accedo allo stesso URL in lynx, che normalmente si lamenta se ci sono errori SSL. Ma non posso usare Lynx per questo test harness, a meno che non riesca a trovare un modo per fare in modo che AsyncHTTPClient di Tornado usi Lynx invece di libcurl. E non sembra avere alcun senso che l'installazione del certificato autofirmato soddisfi Lynx ma non si arricci.

Sto usando Ubuntu 12.04 LTS in un VirtualBox con Vagrant; ha arricciatura 7.22.0. Il proxy di terminazione SSL è nginx/1.3.13 in esecuzione sulla stessa macchina e il nome del dominio è puntato su 127.0.0.1 da una voce in/etc/hosts.

Eventuali indizi su quale potrebbe essere il problema? Grazie.

risposta

14

Quando si utilizza cURL per recuperare un sito HTTPS che non utilizza un certificato firmato da CA, si verifica il seguente problema.

curl https://example.selfip.com 
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details: 
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
More details here: http://curl.haxx.se/docs/sslcerts.html 

Naturalmente, questo può essere semplicemente superato utilizzando l'opzione -k.

La soluzione:

Fase 1
Identificare quale directory utilizza l'installazione di OpenSSL.

[email protected]:~# openssl version -d 
OPENSSLDIR: "/usr/lib/ssl" 

Fase 2
Spostarsi in questa directory ed elencare il contenuto della directory. Dovresti vedere una directory chiamata "certs".

[email protected]:~# cd /usr/lib/ssl && ls -al 

Fase 3
passare a questa directory.

[email protected]:/usr/lib/ssl# cd certs 

Elenco dei contenuti della directory. Dovresti vedere dai link simbolici che i certificati sono effettivamente archiviati in /usr/share/ca-certificates.

Fase 4
Passare alla /usr/share/ca-certificates directory e si aggiunge certificato auto-firmato lì, (es: your.cert.name.crt)

Fase 5
Passare alla directory /etc e modificare il file ca-certificates.conf.

[email protected]:# cd /etc 
[email protected]:# nano ca-certificates.conf 

Aggiungere your.cert.name.crt al file (ca-certificates.conf) e salvarlo.

Ultimo passo:

Eseguire il programma update-ca-certificates –fresh.
Nota: è possibile eseguire il backup di /etc/ssl/certs prima di eseguire il comando.

[email protected]:# update-ca-certificates --fresh 
Clearing symlinks in /etc/ssl/certs...done. 
Updating certificates in /etc/ssl/certs....done. 
Running hooks in /etc/ca-certificates/update.d....done. 

Test con arricciatura sul sito HTTPS di destinazione e dovrebbe funzionare ora.

Source

Problemi correlati