Jestem nowy w świecie CURL, pochodzę z domeny Windows + .NET.
Próba uzyskania dostępu do Rest API w celu podstawowego uwierzytelnienia pod adresem http://www.evercam.io/docs/api/v1/authentication .
curl -X GET https://api.evercam.io/v1/... \
-u {username}
Nie wiem, jak używać tego polecenia w wierszu poleceń systemu Windows po pomyślnym skonfigurowaniu CURL. Testowany CURL w następujący sposób:
C:\>curl --version
curl 7.33.0 (x86_64-pc-win32) libcurl/7.33.0 OpenSSL/0.9.8y zlib/1.2.8 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp s
ftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz
Teraz na tym kończę
C:\>curl -u myuser:mypassword -X GET https://api.evercam.io/v1/
curl: (51) SSL: no alternative certificate subject name matches target host name 'api.evercam.io'
Jak mogę naprawić ten błąd SSL 51?
*.my-domain.com
nie dotyczydev.subdomain.my-domain.com
. Ale działa dobrze dladev-subdomain.my-domain.com
. Aby wiele subdomen działało, być może potrzebujesz tego, co mówi ten artykuł - sslshopper.com/ ...Uwaga edytora: jest to bardzo niebezpieczne podejście, jeśli używasz wystarczająco starej wersji PHP, aby z niej korzystać. Otwiera twój kod na ataki man-in-the-middle i usuwa jeden z głównych celów szyfrowanego połączenia. Możliwość robienia tego została usunięta z nowoczesnych wersji PHP, ponieważ jest tak niebezpieczna. Jedynym powodem, dla którego głosowano 70 razy, jest to, że ludzie są leniwi. NIE RÓB TEGO.
Wiem, że to (bardzo) stare pytanie i dotyczy wiersza poleceń, ale kiedy szukałem w Google hasła „SSL: żadna alternatywna nazwa podmiotu certyfikatu nie pasuje do nazwy hosta docelowego”, to był pierwszy trafienie.
Znalezienie odpowiedzi zajęło mi sporo czasu, więc mam nadzieję, że zaoszczędzi to komuś dużo czasu! W PHP dodaj to do swoich ustawień cUrl:
ps: powinno to być rozwiązanie tymczasowe. Ponieważ jest to błąd certyfikatu, najlepiej jest oczywiście go naprawić!
źródło
CURLOPT_SSL_VERIFYHOST
w moim przypadku wystarczyłoNazwa zwyczajowa w certyfikacie dla
api.evercam.io
jest przeznaczona dla*.herokuapp.com
i nie ma alternatywnych nazw podmiotów w certyfikacie. Oznacza to, że certyfikat dlaapi.evercam.io
nie jest zgodny z nazwą hosta i dlatego weryfikacja certyfikatu kończy się niepowodzeniem. To samo co prawdawww.evercam.io
, np. Spróbuj https://www.evercam.io z przeglądarką, a otrzymasz komunikat o błędzie, że nazwa w certyfikacie nie jest zgodna z nazwą hosta.Jest to więc problem, który musi rozwiązać evercam.io. Jeśli nie zależy Ci na bezpieczeństwie, atakach typu man-in-the-middle itp., Możesz wyłączyć weryfikację certyfikatu (
curl --insecure
), ale wtedy powinieneś zadać sobie pytanie, dlaczego w ogóle używasz https zamiast http.źródło
może to komuś zaoszczędzić trochę czasu.
Jeśli używasz GuzzleHttp i napotykasz ten komunikat o błędzie Błąd cURL 60: SSL: żadna alternatywna nazwa podmiotu certyfikatu nie pasuje do nazwy hosta docelowego i nie ma problemu z rozwiązaniem `` niezabezpieczonym '' (niezalecane na produkcji), musisz dodać
\GuzzleHttp\RequestOptions::VERIFY => false
do klienta konfiguracja:która ustawia wartość
CURLOPT_SSL_VERIFYHOST
0 iCURLOPT_SSL_VERIFYPEER
fałsz wCurlFactory::applyHandlerOptions()
metodzieZ dokumentacji GuzzleHttp
źródło
Jak mówi kod błędu, „żadna alternatywna nazwa podmiotu certyfikatu nie pasuje do nazwy hosta docelowego” - występuje więc problem z certyfikatem SSL.
Certyfikat powinien zawierać SAN i będzie używana tylko sieć SAN. Niektóre przeglądarki ignorują przestarzałą nazwę zwykłą.
RFC 2818 wyraźnie stwierdza, że „Jeśli istnieje rozszerzenie subjectAltName typu dNSName, MUSI być ono użyte jako tożsamość. W przeciwnym razie MUSI być użyte (najbardziej szczegółowe) pole Common Name w polu Subject certyfikatu. Chociaż użycie Common Nazwa jest istniejącą praktyką, jest przestarzała, a urzędy certyfikacji są zachęcane do używania zamiast tego nazwy dNSName. "
źródło
Miałem ten sam problem. W moim przypadku korzystałem z digitalocean i nginx.
Najpierw skonfigurowałem domenę example.app i subdomenę dev.exemple.app w digitalocean. Po drugie, kupiłem dwa certyfikaty SSL od GoDaddy. Na koniec skonfigurowałem dwie domeny w nginx, aby używać tych dwóch certyfikatów ssl z następującym snipetem
Moja konfiguracja domeny example.app
Moja dev.example.app
Kiedy uruchamiałem https://dev.echantillonnage.app , otrzymywałem
Moim błędem były dwie linie poniżej
Musiałem to zmienić na:
źródło