Come correggere l'arricciatura: (60) Certificato SSL: catena di certificati non valida quando si utilizza sudo


12

Quindi, dal momento che il ricciolo di aggiornamento Mavericks ha più problemi con i certificati.

Durante il tentativo di arricciare un file dal mio server Web con il suo certificato autofirmato, veniva visualizzato l'errore "Certificato SSL: catena di certificati non valida".

Ciò è stato corretto aggiungendo il certificato al mio portachiavi di sistema e impostandolo per consentire sempre SSL, informazioni che ho trovato qui e qui .

Funziona bene e quando arriccia un file viene scaricato correttamente.

Tuttavia, se eseguo curl con sudo prima (ad esempio, ho uno script che deve essere eseguito con sudo e fa un curl in esso), allora torno allo stesso messaggio di errore.

Suppongo che root non legga dal portachiavi di sistema forse?

Qualcuno sa un modo per risolvere questo problema?

Risposte:


17

Se memorizzi i tuoi certificati CA sul filesystem (in formato PEM) puoi dire a curl di usarli

sudo curl --cacert /path/to/cacert.pem ...

Puoi anche disattivare la verifica del certificato con

sudo curl --insecure ...

Modifica: aggiornato per quanto riguarda il feedback

Se si desidera impostare questo in modo permanente, è necessario creare un .curlrcfile e posizionarlo nella directory principale. sudoi comandi potrebbero aver bisogno di questo file in /var/rootIl file accetta le stesse opzioni della riga di comando ma senza i trattini. Un'opzione per riga:

cacert=/path/to/my/certs.pem

Grazie per la tua risposta, lo script che viene eseguito con sudo proviene da una terza parte e quindi non posso davvero modificare il comando curl stesso. Insicuro non è davvero un'opzione. Questo può essere fatto a livello globale?
Jacob Tomlinson,

Puoi creare un file .curlrc e archiviarlo nella tua cartella home, anche se usando sudo potrebbe essere necessario essere /var/root/.curlrc. Il file dovrebbe contenere opzioni senza trattini, una per riga. Quindi "cacert = / path / to / my / certs.pem"
Dan,

1
+1 per l'impostazione di un rootdisponibile .curlrcanziché --insecure. Il che è esattamente come dice: per un attaccante nella posizione di rete farlo, sarebbe banale per MITM e iniettare codice.
zigg,

Grazie per questo, sembra quello che sto cercando. Lo proverò domani e assegnerò la ricompensa se funziona.
Jacob Tomlinson,

6

La radice non legge dalle attuali impostazioni di attendibilità dell'utente, ma esistono sia impostazioni di attendibilità dell'amministratore che impostazioni di attendibilità specifiche dell'utente root. (Questi sono anche distinti dalle impostazioni di attendibilità del sistema .) Nota, inoltre, che le impostazioni di attendibilità del certificato sono in qualche modo distinte dal semplice aggiunta di un certificato a un portachiavi; puoi contrassegnare un certificato come attendibile senza aggiungerlo completamente. (La situazione esatta qui non mi è chiara e i documenti che ho visto sono vaghi.)

È possibile contrassegnare un certificato come attendibile per l'utente corrente come

$ security add-trusted-cert /path/to/cert.pem

ma questo non aiuta con root. La soluzione, come si può immaginare, è sudola precedente, che la contrassegna come attendibile per l'utente root in particolare:

$ sudo security add-trusted-cert /path/to/cert.pem

o per utilizzare il -dflag per aggiungerlo alle impostazioni di attendibilità dell'amministratore:

$ security add-trusted-cert -d /path/to/cert.pem

(OS X mostrerà una finestra di dialogo per confermare la password.)

Uno dei due ultimi sembra essere sufficiente per sudo curl.

Riferimento: https://developer.apple.com/library/mac/Documentation/Darwin/Reference/ManPages/man1/security.1.html


Come ho detto nella domanda, li ho già aggiunti al portachiavi di sistema e al portachiavi di accesso.
Jacob Tomlinson,

Hai davvero provato quello che ti ho suggerito? L'ho provato, esattamente nella situazione che descrivi, e ha funzionato. Non sono chiaro su tutti i dettagli - la documentazione è vaga - ma dovresti sapere che le impostazioni di affidabilità del certificato NON sono del tutto sinonimo di aggiunta del certificato a un portachiavi e che le impostazioni di affidabilità del certificato di amministrazione esistono separatamente sia dal sistema che dal impostazioni utente / portachiavi. (Nel mix sembra esserci anche un set di impostazioni utente specifiche dell'utente root.) Ho modificato la mia risposta per essere più chiara su questo punto. Per favore, prova questa soluzione.
Wes Campaigne

Sì, ho provato questa soluzione la prima volta che l'hai pubblicata. I certificati si trovano nel portachiavi di sistema e sono impostati come affidabili. Ancora niente fortuna.
Jacob Tomlinson,

5

Questo è davvero nel suggerimento di output:

echo insecure >> ~/.curlrc

Il vantaggio di utilizzare la soluzione di cui sopra è che funziona per tutti i curlcomandi, ma non è raccomandato poiché potrebbe introdurre attacchi MITM connettendosi a host non sicuri e non affidabili.


2

Se usi MacPorts (e lo script di terze parti che hai citato non lo rimuove $PATHo chiama /usr/bin/curl) puoi installare le porte certsynce curlin questo ordine.

certsyncè uno strumento e un corrispondente programma di avvio che esporterà il tuo portachiavi di sistema $prefix/etc/openssl/cert.peme installerà un collegamento simbolico in $prefix/share/curl/curl-ca-bundle.crt -> $prefix/etc/openssl/cert.pemmodo che l'arricciatura di MacPorts raccolga automaticamente i certificati. certsyncaggiornerà anche automaticamente i file generati quando cambi il tuo portachiavi di sistema.


Grazie per questo, mi piacerebbe evitare di usare MacPorts, se possibile.
Jacob Tomlinson,


-1

Per far sudo curlfunzionare (su OSX Sierra), abbiamo dovuto importare il certificato System.keychaine fidarci lì. Questo potrebbe essere fatto manualmente nell'app Keychain o usando questo comando:

sudo security add-trusted-cert -d -k /Library/Keychains/System.keychain /path/to/cert.pem

È stato importante specificare -de impostare manualmente il percorso del portachiavi di sistema tramite -kper assicurarsi che il certificato venga effettivamente importato lì se non lo è ancora.

Il comando funziona senza sudo, ma quindi richiederebbe la password tramite una finestra di dialogo dell'interfaccia utente, che potrebbe essere un ostacolo per gli script.


Ottengo l'erroreSecCertificateCreateFromData: Unknown format in import.
rraallvv

Chiunque abbia effettuato il downgrade, sappia che ho scritto chiaramente "su OSX Sierra" e questa è stata una soluzione funzionante per noi. Se non funziona con versioni OSX più recenti di quelle potrebbero essere perché il supporto o gli strumenti OSX sono cambiati. O un problema come il commentatore precedente, in cui il file di input non è in un formato supportato (la domanda non lo specifica).
Alexander Klimetschek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.