2015-03-08 26 views
7

Próbuję uruchomić następującą komendę CURL ale ja dostaję błąd SSL certyfikatu:Curl polecenia dla HTTPS (SSL)

curl https://example.com:8443/cli/agentCLI -u username:password 

Błąd:

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

curl performs SSL certificate verification by default, using a "bundle" of Certificate Authority (CA) public keys (CA certs). The default bundle is named curl-ca-bundle.crt; you can specify an alternate file using the --cacert option. If this HTTPS server uses a certificate signed by a CA represented in the bundle, the certificate verification probably failed due to a problem with the certificate (it might be expired, or the name might not match the domain name in the URL). If you'd like to turn off curl's verification of the certificate, use the -k (or --insecure) option.

Jak rozwiązać ten problem pozwolić na adresy URL SSL?

+0

patrz także (https://stackoverflow.com/q/27611193/608639) – jww

Odpowiedz

9

jeśli używasz certyfikatu z podpisem własnym na serwerze, można użyć:

curl -k https://example.com:8443/cli/agentCLI -u username:password 

ale należy pamiętać, że to nie ma lepszego niż przy braku połączenia SSL z serwerem, jak twoja komunikacja wygrał” być bezpiecznym, umożliwiając wszelkiego rodzaju ludzi w środkowych atakach.

Choć moja rada dla ciebie jest, aby pobrać .pem z serwera:

używając:

echo "HEAD/HTTP/1.0\n Host: example.com\n\n EOT\n" | openssl s_client -prexit -connect example.com:8443 > cert.pem 

do ciebie r komputer, zachowaj tylko część między BEGIN CERTIFICATE i END CERTIFICATE w pliku (w tym linie BEGIN/END) i daj ją jako parametr opcji --cacert, możesz również pobrać. Wtedy będziesz mógł uwierzytelnić swój serwer za każdym razem, gdy się połączysz!

curl --cacert cert.pem https://example.com:8443/cli/agentCLI -u username:password 

Testy na własnym podpisem własnym serwerze, to działa dobrze:

% openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----' > cert.pem 
% curl --cacert cert.pem https://example.com 

na przykład, że powinno działać:

% openssl s_client -showcerts -connect git.cryptolib.org:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----' > cert.pem 
% curl --cacert cert.pem https://git.cryptolib.org 
curl: (51) SSL: certificate verification failed (result: 5) 

ale niestety to nie jest.

Próbowałem też zrobić, jak sugeruje here:

% openssl x509 -inform PEM -in cert.pem -text -out certdata.pem 
% curl --cacert certdata.pem https://git.cryptolib.org 

Które nie działa, ponieważ serwis (git.cryptolib.org) używam do testowania nie jest podpisem własnym, ale to z łańcucha CACert, który można rozwiązać za pomocą certyfikatów głównych CACert, po tym FAQ.


kilku zasobów kopać:

Ale nie jednoznacznej odpowiedzi tak daleko [? Samodzielnego stosowania podpisany certyfikat z cURL] -s

+0

Dzięki Zmo..i pobrało .pem, uruchamiając polecenie echo "HEAD/HTTP/1.0 \ n Host: example.com \ n \ n EOT \ n" | openssl s_client -prexit -connect example.com:8443> cert.pem. Ale otrzymuję ten sam błąd, gdy im uruchomię drugie polecenie, które dałeś tutaj – Kalaiyarasan

+0

Po zm. Po pobraniu cret.pem uruchomiłem curl -k https://example.com:8443/cli/agentCLI -u user: pass. Teraz otrzymuję wyjście .. Dzięki .. Ale mam nieczytelne dane wyjściowe ... Czy możesz mi powiedzieć, jak otrzymam wyjście takie jak wiersz .. – Kalaiyarasan

+0

'curl -k' to moja pierwsza odpowiedź i daje ci niezabezpieczone połączenie https na serwer. Sprawia, że ​​to działa, ale nie czyni go uwierzytelnionym. – zmo

Powiązane problemy