curl: (60) Problem z certyfikatem SSL: nie można uzyskać certyfikatu lokalnego wystawcy

258
root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
*   Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
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). If the default
 bundle file isn't adequate, 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.
użytkownik3812540
źródło
Miałem podobny problem. To zadziałało dla mnie stackoverflow.com/a/29649024
Sagruob
W moim przypadku superuser.com/a/719047/137881 pomógł.
Abdull,
// W moim przypadku wystąpił ten błąd podczas wysyłania żądań curl do serwera HashiCorp Vault, dopóki nie zainstalowałem certyfikatu X509 z jednostką końcową / Intermediates / root tylko w odwrotnej kolejności, z których każda była zakodowana w standardzie Base64.
Nathan Basanese
//, Jakie badania przeprowadziłeś na ten temat przed skopiowaniem błędu tutaj?
Nathan Basanese

Odpowiedzi:

231

Dotyczy błędu „Problem z certyfikatem SSL: nie można uzyskać certyfikatu lokalnego wystawcy”. Należy zauważyć, że dotyczy to systemu wysyłającego żądanie CURL, a NIE serwer odbierający żądanie.

  1. Pobierz najnowszy cacert.pem z https://curl.haxx.se/ca/cacert.pem

  2. Dodaj następujący wiersz do php.ini: (jeśli jest to hosting współdzielony i nie masz dostępu do php.ini, możesz dodać to do .user.ini w public_html).

    curl.cainfo="/path/to/downloaded/cacert.pem"

    Upewnij się, że ścieżka jest zamknięta w podwójnych cudzysłowach !!!

  3. Domyślnie proces FastCGI będzie analizował nowe pliki co 300 sekund (w razie potrzeby możesz zmienić częstotliwość dodając kilka plików, jak sugerowano tutaj https://ss88.uk/blog/fast-cgi-and-user-ini- files-the-new-htaccess / ).

Dahomz
źródło
1
Pierwszy dotyczy certyfikacji operacji wykonywanych przy użyciu biblioteki OpenSSL; drugi wniosek złożony za pomocą cURL
Mike
4
Właściwie walczyłem przez godzinę, ponieważ nie pisałem ścieżki w cudzysłowie. Więc proszę zanotuj tutajcurl.cainfo="/path/to/downloaded/cacert.pem" // Do not forget to write between quotes
Himanshu Upadhyay
12
Nie widzę żadnego odniesienia w pytaniu do PHP. Dlaczego odniesienia w odpowiedzi? Jeśli pytanie zostało zredagowane, to czy odpowiedź może być edytowana, tak aby odzwierciedlała obecnie używany wiersz poleceń?
Adam
5
@Adam Chociaż pytanie nie wspomina o PHP, pojawia się jako wynik wyszukiwania nr 1 w Google dla konkretnego komunikatu o błędzie generowanego przez PHP. Może więc nie odpowiada konkretnie na pytanie OP, ale wydaje się, że nadal jest użyteczne dla społeczności.
rinogo,
1
Ta odpowiedź była dla mnie myląca, ponieważ jest to rozwiązanie związane z PHP
Wasif Khan
141

Błąd kończy się, ponieważ cURL nie może zweryfikować certyfikatu dostarczonego przez serwer.

Istnieją dwie opcje, aby to uruchomić:

  1. Użyj cURL z -kopcją, która pozwala curl na tworzenie niezabezpieczonych połączeń, to znaczy cURL nie weryfikuje certyfikatu.

  2. Dodaj główny urząd certyfikacji (urząd certyfikacji podpisujący certyfikat serwera) do /etc/ssl/certs/ca-certificates.crt

Powinieneś użyć opcji 2, ponieważ zapewnia ona połączenie z bezpiecznym serwerem FTP.

Yuvika
źródło
1
Dodałem plik rootCA.pem do: - root @ sclrdev: / home / certs / FreshCerts # ll /etc/ssl/certs/rootCA.pem -rwxrwxrwx 1 root root 1302 8 00:09 / etc / ssl / certs / rootCA.pem * Nawet zweryfikowałem plik ServerCertificate.pem za pomocą mojego rootCA.pem: - root @ sclrdev: / home / certs / FreshCerts # openssl Verify -CAfile rootCA.pem ../ServerCertificate.pem ServerCertificate.pem: OK I również zawartość rootCA.pem wewnątrz ca-certyfikatów.crt. root @ sclrdev: / home / sclr / subhendu / certs / FreshCerts # ll /etc/ssl/certs/ca-certificates.crt -rw-r - r-- 1 root root 247945 8 lipca 00:10 / etc / ssl /certs/ca-certificates.crt
user3812540
Nie jestem w stanie zrozumieć, gdzie się mylę. W śladach WireShark pojawia się następujący błąd: - Klient Witaj Serwer Witaj, Certyfikat, Serwer Witaj Gotowe Alert (poziom: Fatalny, Opis: nieznany CA (48)) Czy możesz mi pomóc i pomóc w tym?
user3812540,
Sposób openssl polega na próbie ukończenia łańcucha certyfikatów podczas weryfikacji. Czy certyfikat serwera jest podpisany przez pośredni urząd certyfikacji, a nie główny urząd certyfikacji? na przykład
Yuvika
Mój certyfikat jest podpisany tylko przez główny urząd certyfikacji.
user3812540,
1
Mam błąd: - root @ sclrdev: ~ # openssl s_client -connect <server_ip>: 21 -showcerts CONNECTED (00000003) 3074050248: błąd: 140770FC: procedury SSL: SSL23_GET_SERVER_HELLO: nieznany protokół: s23_clnt.c: 766: --- brak dostępnego certyfikatu równorzędnego --- Nie wysłano certyfikatu klienta Nazwy CA --- Uzgadnianie SSL odczytało 7 bajtów i zapisało 225 bajtów --- Nowy, (BRAK), Szyfr jest (BRAK) Bezpieczna renegocjacja NIE JEST obsługiwana Kompresja: BRAK Rozszerzenie: BRAK --- Nie jestem pewien, co to dokładnie oznacza?
user3812540,
69

Rozwiązałem ten problem, dodając jeden kod wiersza w skrypcie cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Ostrzeżenie : To sprawia, że ​​żądanie jest całkowicie niepewne (patrz odpowiedź @YSU)!

Vijay Bhandari
źródło
42
Może to pomóc w obejściu problemu. Ale całkowicie pomija ideę https i systemu certyfikacji.
Stephan Richter
1
Pracuje! Ładne szybkie i brudne obejście, jeśli nie obchodzi cię certyfikat
Gilly,
2
To sprawia, że ​​jest całkowicie niepewny.
Moox
1
Napotkałem ten problem na moim serwerze lokalnym, chociaż ten sam kod działał dobrze na serwerze pomostowym. W porządku dla mnie, jak to było na miejscu. Dzięki
sabin
1
dodaj tę opcję, aby upewnić się, że używasz jej tylko z lokalnym serwerem if( stristr("127.0.0.1",$_SERVER["SERVER_NAME"] ) || stristr("localhost",$_SERVER["SERVER_NAME"] )) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Hussain
20

W moim przypadku okazało się, że jest to problem z instalacją mojego certyfikatu w usłudze, którą próbowałem wykorzystać za pomocą cURL. Nie udało się powiązać / połączyć certyfikatów pośrednich i głównych z certyfikatem mojej domeny . Na początku nie było oczywiste, że to był problem, ponieważ Chrome go opracował i zaakceptował certyfikat, pomimo pomijania certyfikatów pośrednich i głównych.

Po spakowaniu certyfikatu wszystko działało zgodnie z oczekiwaniami. Tak się pakowałem

$ cat intermediate.crt >> domain.crt

I powtarzane dla wszystkich certyfikatów pośrednich i głównych.

Daniel Watrous
źródło
2
Miałem podobny problem, z tym wyjątkiem, że nie ustawiłem mojego Apache SSLCertificateChainFile na prawidłowy certyfikat.
Wayne Piekarski
1
Zauważ, że jeśli to zrobisz, a dodawane przez ciebie crt nie mają końcowej nowej linii, to będziesz miał linie jak -----END CERTIFICATE----------BEGIN CERTIFICATE-----w pakiecie i dostaniesz niejasny błąd:curl: (77) error setting certificate verify locations
Marty Neal
2
Używam certyfikatów letsencrypt, ale wdrożyłem tylko certyfikat i klucz prywatny na serwerze. Chrome i curl na moim komputerze nie narzekały, jednak tworzona przez mnie aplikacja nodejs nie akceptowała certyfikatu. Wdrożenie fullchain na serwerze naprawiło problem! Dziękujemy za wskazanie właściwego kierunku!
Paulo Santos,
W moim przypadku (certyfikat z comodo) wysłali certyfikaty pośrednie jako pakiet my-domain.ca. Musiałem dołączyć to do my-domain.crt. Dzięki!
Jon Hulka
18

Dla mnie prosta instalacja certyfikatów pomogła:

sudo apt-get install ca-certificates
Maxim Krušina
źródło
2
Na przykład niektóre małe kontenery dokerów mogą nie mieć tego zainstalowanego i nie ma sensu rozwiązywać problemów, gdy nie ma całego pakietu.
muni764
16

Miał ten problem po instalacji Git Extensions v3.48. Próbowałem ponownie zainstalować mysysgit, ale ten sam problem. Na koniec musiałem wyłączyć (proszę wziąć pod uwagę wpływ na bezpieczeństwo!) Git weryfikacja SSL za pomocą:

git config --global http.sslVerify false

ale jeśli masz certyfikat domeny, lepiej dodaj go do (Win7)

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
Ryga
źródło
23
Działa, ale ma ochotę ukryć objaw, a nie wyleczyć choroby.
MonoThreaded
4
Wyłączenie weryfikacji SSL jest bardzo niebezpieczne
jonasl
1
Można obejść się bez --globalwyłączania protokołu SSL tylko dla repozytorium, w którym występują problemy. Zobacz groups.google.com/forum/#!topic/git-for-windows/mlqn5J4OLlw w celu omówienia aktualnych niezbędnych plików crt.
koppor
13

Niedawno napotkaliśmy ten błąd. Okazuje się, że było to związane z nieprawidłowym zainstalowaniem certyfikatu głównego w katalogu magazynu urzędu certyfikacji. Korzystałem z polecenia curl, w którym bezpośrednio określałem katalog urzędu certyfikacji. curl --cacert /etc/test/server.pem --capath /etc/test ...To polecenie kończyło się niepowodzeniem za każdym razem z zawijaniem: (60) Problem z certyfikatem SSL: nie można uzyskać lokalnego certyfikatu wystawcy.

Po użyciu strace curl ...ustalono, że curl szukał pliku certyfikatu głównego o nazwie 60ff2731.0, który jest oparty na konwertowaniu nazw mieszania openssl. Znalazłem więc to polecenie, aby skutecznie zaimportować poprawnie certyfikat główny:

ln -s rootcert.pem `openssl x509 -hash -noout -in rootcert.pem`.0

który tworzy softlink

60ff2731.0 -> rootcert.pem

curl, pod przykrywkami, przeczytał certyfikat server.pem, ustalił nazwę głównego pliku certyfikatu (rootcert.pem), przekonwertował go na nazwę skrótu, a następnie przeszukał plik systemu operacyjnego, ale nie mógł go znaleźć.

Tak więc, na wynos, użyj strace podczas uruchamiania zwijania, gdy błąd zwijania jest niejasny (była to ogromna pomoc), a następnie upewnij się, że poprawnie zainstalowałeś certyfikat główny przy użyciu konwencji nazewnictwa openssl.

koder gp
źródło
2
Uff, pomogło. Aby rozwinąć nieco to, co pomogło mi: a) uruchom strace curl ... b) poszukaj nieudanego stat () z czymś hex-c c) googled na coś-hex, znalazłem odpowiadający mu certyfikat d) umieściłem found cert w / usr / local / share / ca-certyfikaty / (z rozszerzeniem * .crt, ponieważ * .pem nie działał) e) uruchom aktualizację ca-certyfikatów. Więc Bingo! - niezbędne łącze symboliczne zostało zautomatyzowane utworzone w / usr / lib / ssl / certs /
No-Bugs Hare
11

Najprawdopodobniej brakuje certyfikatu z serwera.

Root-> Intermediate-> Server

Serwer powinien wysłać przynajmniej serwer i serwer pośredni.

Służy openssl s_client -showcerts -starttls ftp -crlf -connect abc:21do debugowania problemu.

Jeśli zostanie zwrócony tylko jeden certyfikat (samopodpisany lub wydany), musisz wybrać:

  1. napraw serwer
  2. zaufaj temu certyfikatowi i dodaj go do swojego sklepu CA Cert (nie jest to najlepszy pomysł)
  3. wyłącz zaufanie, np. curl -k(bardzo zły pomysł)

Jeśli serwer zwrócił więcej niż jeden, ale nie zawiera certyfikatu z podpisem własnym (root):

  1. zainstaluj certyfikat CA (root) w swoim sklepie CA dla tego łańcucha, np. Google wystawcy. ( TYLKO jeśli ufasz temu urzędowi certyfikacji)
  2. zlecić serwerowi wysyłanie urzędu certyfikacji jako części łańcucha
  3. zaufaj certyfikatowi w łańcuchu
  4. wyłącz zaufanie

Jeśli serwer zwrócił certyfikat głównego urzędu certyfikacji, oznacza to, że nie ma go w magazynie urzędu certyfikacji, masz następujące opcje:

  1. Dodaj (zaufaj) to
  2. wyłącz zaufanie

Zignorowałem wygasłe / odwołane certyfikaty, ponieważ nie było żadnych wiadomości o tym informujących. Ale możesz sprawdzić certyfikaty za pomocąopenssl x509 -text

Biorąc pod uwagę, że łączysz się z edycją domową ( https://www.cerberusftp.com/support/help/installing-a-certificate/ ) serwer ftp, powiem, że jest to samopodpisany.

Proszę zamieścić więcej szczegółów, takich jak dane wyjściowe z openssl.

Jason Pyeron
źródło
6

Zgodnie z dokumentacją cURL możesz również przekazać certyfikat do curlpolecenia:

Uzyskaj certyfikat CA, który może zweryfikować zdalny serwer i użyj odpowiedniej opcji, aby wskazać ten certyfikat CA do weryfikacji podczas łączenia. Dla libcurlhakerów:curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

Za pomocą narzędzia wiersza polecenia curl: --cacert [file]


Na przykład:

curl --cacert mycertificate.cer -v https://www.stackoverflow.com
Giorgos Myrianthous
źródło
5

Wystarczy zaktualizować listę certyfikatów

sudo update-ca-certificates -f

update-ca-certyfikaty to program, który aktualizuje katalog / etc / ssl / certs w celu przechowywania certyfikatów SSL i generuje ca-certyfikaty.crt, połączoną listę certyfikatów z jednym plikiem.

Michael P. Bazos
źródło
zrobił to i wszystko jest zrobione po uruchomieniu. Ale curl nie działa. wciąż ten sam błąd.
AGamePlayer
1
Dowodziłem, ale to nie pomogło i nie mogłem uwierzyć, że muszę zrobić wszystko powyżej. A potem twoja odpowiedź ... Dzięki za flagę „-f”.
Alex Shtromberg
1
Do tego też doszedłem. +1
SS Anne
3

Spróbuj ponownie zainstalować curl w Ubuntu i zaktualizuj moje certyfikaty CA, dzięki sudo update-ca-certificates --freshktórym zaktualizowałem certyfikaty

Ankit Singh
źródło
2

W systemie Windows miałem ten problem. Curl został zainstalowany przez mysysgit, więc pobranie i zainstalowanie najnowszej wersji rozwiązało mój problem.

W przeciwnym razie są to przyzwoite instrukcje, jak zaktualizować certyfikat CA, który możesz wypróbować.

Steve
źródło
2

Tak, musisz również dodać certyfikat CA. Dodanie fragmentu kodu w Node.js w celu uzyskania wyraźnego widoku.

var fs = require(fs)
var path = require('path')
var https = require('https')
var port = process.env.PORT || 8080;
var app = express();

https.createServer({
key: fs.readFileSync(path.join(__dirname, './path to your private key/privkey.pem')),
cert: fs.readFileSync(path.join(__dirname, './path to your certificate/cert.pem')),
ca: fs.readFileSync(path.join(__dirname, './path to your CA file/chain.pem'))}, app).listen(port)
Ravi Prakash
źródło
2

Zetknąłem się również z tym problemem. Przeczytałem ten wątek i większość odpowiedzi ma charakter informacyjny, ale jest dla mnie zbyt skomplikowana. Nie mam doświadczenia w tematach sieciowych, więc ta odpowiedź jest dla osób takich jak ja.

W moim przypadku ten błąd występował, ponieważ nie uwzględniłem certyfikatów pośrednich i głównych obok certyfikatu, którego używałem w mojej aplikacji.

Oto, co otrzymałem od dostawcy certyfikatu SSL:

- abc.crt
- abc.pem
- abc-bunde.crt

W abc.crtpliku był tylko jeden certyfikat:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----

Gdybym dostarczył go w tym formacie, przeglądarka nie pokazywałaby żadnych błędów (Firefox), ale dostałbym curl: (60) SSL certificate : unable to get local issuer certificatebłąd, kiedy wysłałem prośbę o zwijanie.

Aby naprawić ten błąd, sprawdź abc-bunde.crtplik. Najprawdopodobniej zobaczysz coś takiego:

-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Są to Twoje certyfikaty pośrednie i główne. Wystąpił błąd, ponieważ brakuje go w certyfikacie SSL dostarczanym do aplikacji.

Aby naprawić błąd, połącz zawartość obu tych plików w tym formacie:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Zauważ, że nie ma spacji między certyfikatami, na końcu lub na początku pliku. Po dostarczeniu tego połączonego certyfikatu do aplikacji problem powinien zostać rozwiązany.

Eorekan
źródło
1

Moja sprawa była inna. Prowadzę witrynę za zaporą ogniową. Błąd został spowodowany przez pfSense.

Network layout: |Web Server 10.x.x.x| <-> |pfSense 49.x.x.x| <-> |Open Internet|

Dzięki tej odpowiedzi przypadkowo znalazłem przyczynę .


Wszystko jest w porządku, kiedy uzyskuję dostęp do mojej witryny z sieci WAN.

Jednak gdy strona była dostępna z sieci LAN (np. Gdy Wordpress wysłał curlżądanie do własnego serwera, pomimo używania adresu IP WAN 49.x.x.x), wyświetlono stronę logowania do pfSense.

Zidentyfikowałem certyfikat jako pfSense webConfigurator Self-Signed Certificate. Nic dziwnego, że curlrzucił błąd.

Przyczyna: Stało się tak, że curlkorzystał z adresu IP WAN witryny 49.x.x.x. Ale w kontekście serwera sieci WAN IP było zaporą ogniową.

Debugowanie: Odkryłem, że otrzymuję certyfikat pfSense.

Rozwiązanie: na serwerze hostującym witrynę wskaż własną nazwę domeny na 127.0.0.1

Po zastosowaniu rozwiązania curlżądanie zostało poprawnie obsłużone przez serwer WWW i nie zostało przesłane do zapory ogniowej, która odpowiedziała wysyłając stronę logowania.

PNDA
źródło
0

To jest problem z magazynem certyfikatów ssh. Musisz pobrać prawidłowy plik pem certyfikatu z docelowej witryny CA, a następnie skompilować plik soft link, aby poinstruować ssl o zaufanym certyfikacie.

openssl x509 -hash -noout -in DigiCert_Global_Root_G3.pem

dostaniesz dd8e9d41

buduj łącze solf z numerem skrótu i ​​sufiksem pliku o .0 (kropka-zero)

dd8e9d41.0

Następnie spróbuj ponownie.

zrozumiałem
źródło
0
  1. Pobierz https://curl.haxx.se/ca/cacert.pem

  2. Po pobraniu przenieś ten plik na serwer Wamp.

    Dla exp: D: \ wamp \ bin \ php \

  3. Następnie dodaj następujący wiersz do pliku php.ini na dole.

curl.cainfo = "D: \ wamp \ bin \ php \ cacert.pem"

  1. Teraz uruchom ponownie serwer Wamp.
Sandeep Kumar
źródło
0

Musisz zmienić certyfikat serwera z cert.pemna fullchain.pem
Mam ten sam problem z Perlem HTTPS Daemon:
Zmieniłem:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/cert.pem'
na:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/fullchain.pem'

k-messaoudi
źródło
-1

Do tej pory widziałem ten problem występujący w sieciach korporacyjnych z dwóch powodów, z których jeden lub oba mogą występować w twoim przypadku:

  1. Ze względu na sposób działania sieciowych serwerów proxy mają własne certyfikaty SSL, zmieniając w ten sposób certyfikaty, które są widziane. Wiele lub większość sieci korporacyjnych zmusza do korzystania z tych serwerów proxy.
  2. Niektóre programy antywirusowe działające na komputerach klienckich działają również podobnie do proxy HTTPS, dzięki czemu mogą skanować ruch sieciowy. Twój program antywirusowy może mieć opcję wyłączenia tej funkcji (zakładając, że zezwolą na to administratorzy).

Na marginesie, nr 2 powyżej może powodować, że czujesz się nieswojo podczas skanowania rzekomo bezpiecznego ruchu TLS. To dla ciebie świat korporacyjny.

rdguam
źródło
-1

Miałem ten problem i nie został rozwiązany w nowszej wersji. / etc / certs miał root cert, przeglądarka powiedziała, że ​​wszystko jest w porządku. Po kilku testach otrzymałem od ssllabs.com ostrzeżenie, że mój łańcuch nie jest kompletny (w rzeczywistości był to łańcuch dla starego certyfikatu, a nie nowego). Po poprawieniu łańcucha certyfikatów wszystko było w porządku, nawet przy zwijaniu.

Szczery
źródło
-1

Miałem ten problem z Digicert wszystkich CA. Utworzyłem plik digicertca.pem, który był zarówno pośredni, jak i główny wklejony razem w jeden plik.

curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
curl https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt.pem

curl -v https://mydigisite.com/sign_on --cacert DigiCertCA.pem
...
*  subjectAltName: host "mydigisite.com" matched cert's "mydigisite.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
*  SSL certificate verify ok.
> GET /users/sign_in HTTP/1.1
> Host: mydigisite.com
> User-Agent: curl/7.65.1
> Accept: */*
...

Eorekan miał odpowiedź, ale tylko ja i ja mogłem głosować na jego odpowiedź.

Kirt Carson
źródło
-2

Specjalnie dla Windowsużytkowników, korzystających curl-7.57.0-win64-mingwlub podobnych wersji.

To trochę za późno, a istniejące odpowiedzi są poprawne. Ale nadal musiałem trochę się zmagać, aby działał na moim komputerze z systemem Windows, choć proces ten jest dość prosty. Udostępnianie procesu krok po kroku.

Ten błąd zasadniczo oznacza, że ​​curl nie może zweryfikować certyfikatu docelowego identyfikatora URI. Jeśli ufasz wystawcy certyfikatu (CA), możesz dodać go do listy zaufanych certyfikatów.

W tym celu przejrzyj URI (np. W Chrome) i postępuj zgodnie z instrukcjami

  1. Kliknij prawym przyciskiem myszy ikonę bezpiecznej kłódki
  2. Kliknij certyfikat, otworzy się okno ze szczegółami certyfikatu
  3. Przejdź do zakładki „Ścieżka certyfikacji”
  4. Kliknij certyfikat ROOT
  5. Kliknij opcję Wyświetl certyfikat, otworzy się kolejne okno certyfikatu
  6. Przejdź do zakładki Szczegóły
  7. Kliknij Kopiuj do pliku, otworzy się kreator eksportu
  8. Kliknij Następny
  9. Wybierz „X.509 (.CER) zakodowane w standardzie Base-64”.
  10. Kliknij Następny
  11. Podaj przyjazną nazwę, np. „MyDomainX.cer” (przejdź do żądanego katalogu)
  12. Kliknij Następny
  13. Kliknij przycisk Zakończ, zapisze plik certyfikatu
  14. Teraz otwórz to .cer plik i skopiuj zawartość (w tym ----- ROZPOCZNIJ CERTYFIKAT ----- i ----- KONIEC CERTYFIKAT -----)
  15. Teraz przejdź do katalogu, w którym curl.exe jest zapisany npC:\SomeFolder\curl-7.57.0-win64-mingw\bin
  16. Otworzyć curl-ca-bundle.crt plik za pomocą edytora tekstu
  17. Dołącz skopiowany tekst certyfikatu na końcu pliku. Zapisać

Teraz twoje polecenie powinno działać poprawnie w zawijaniu.

Arghya C.
źródło
3
Doceniony zostanie komentarz na temat powodu głosowania za wygraną
Arghya C,
Nie mogę znaleźć żadnego pliku o nazwie „curl-ca-bundle.crt” w „C: \ xampp \ apache \ bin” (Windows). Zgadnij, że powodem były niższe głosy. Mam mój „curl.exe” w wyżej wymienionym folderze „bin”
kathikeyan A
-4

może ci to pomóc w żłobie:

$client = new Client(env('API_HOST'));
$client->setSslVerification(false);

testowany na guzzle / guzzle 3. *

fico7489
źródło
-5

Proste rozwiązanie: IN ~/.sdkman/etc/config, zmianasdkman_insecure_ssl=true

Kroki: zmiana
nano, aby zapisać i wyjść~/.sdkman/etc/config
sdkman_insecure_ssl=falsesdkman_insecure_ssl=true

biniam
źródło