Błąd cURL error 60 SSL w WordPress – jak naprawić [Poradnik]

Pobieranie nie powiodło się. cURL error 60: SSL certificate – jak naprawić w WordPress

Błąd cURL error 60: SSL certificate problem: unable to get local issuer certificate pojawia się w WordPressie zwykle przy próbie instalacji lub aktualizacji wtyczek, motywów albo samego rdzenia WP – czyli wszędzie tam, gdzie WordPress łączy się przez HTTPS z zewnętrznym serwerem (np. api.wordpress.org).


Co właściwie oznacza ten błąd

Kod 20 w OpenSSL (unable to get local issuer certificate) mówi, że serwer nie potrafi zweryfikować łańcucha certyfikatów SSL strony docelowej, bo lokalny plik z zaufanymi certyfikatami root (CA bundle) jest nieaktualny, uszkodzony albo w ogóle nie jest wskazany w konfiguracji PHP/cURL. To nie jest problem z certyfikatem strony, którą WordPress próbuje odpytać – problem leży po stronie Twojego serwera.

Notatka
Najczęstsze przyczyny to: przestarzały plik cacert.pem na serwerze, brak lub błędna ścieżka do CA bundle w konfiguracji PHP (curl.cainfo, openssl.cafile), przestarzała wersja OpenSSL/cURL w systemie oraz nieaktualny plik wp-includes/certificates/ca-bundle.crt w samym WordPressie.

Rozwiązanie 1: aktualizacja ca-bundle.crt w WordPressie

WordPress trzyma własną kopię certyfikatów root w pliku wp-includes/certificates/ca-bundle.crt. To pierwsze miejsce do sprawdzenia.

  1. Pobierz aktualny plik z najnowszej wersji WordPressa (najnowsze archiwum ZIP z wordpress.org lub bezpośrednio z repozytorium GitHub WordPress Core).
  2. Podmień plik na serwerze przez FTP/SFTP lub panel hostingu w lokalizacji wp-includes/certificates/ca-bundle.crt.
  3. Ustaw uprawnienia 644 na pliku.
  4. Wyczyść ewentualny cache obiektowy (Redis/Memcached) i spróbuj ponownie.
Wskazówka
To najprostsza i najczęściej skuteczna metoda, bo w większości przypadków WordPress używa właśnie tego pliku jako CURLOPT_CAINFO, jeśli PHP nie ma ustawionego własnego.

Rozwiązanie 2: aktualizacja CA bundle na poziomie serwera (system/PHP)

Jeśli podmiana pliku WP nie pomaga, problem leży w konfiguracji samego serwera – czyli w systemowym cURL/OpenSSL, z którego korzysta PHP niezależnie od plików WordPressa.

Na serwerach Linux (Debian/Ubuntu):

sudo apt update
sudo apt install --reinstall ca-certificates
sudo update-ca-certificates

Na serwerach z CentOS/AlmaLinux/RHEL:

sudo yum reinstall ca-certificates
sudo update-ca-trust

Ręczna aktualizacja cacert.pem dla PHP

Jeśli nie masz dostępu roota do systemu (typowy hosting współdzielony), pobierz aktualny plik cacert.pem bezpośrednio z curl.se:

Pobierz cacert.pem

Wgraj go na serwer (np. do katalogu poza public_html, żeby nie był publicznie dostępny) i wskaż go w php.ini:

curl.cainfo = "/sciezka/do/cacert.pem"
openssl.cafile = "/sciezka/do/cacert.pem"

Po zmianie php.ini zrestartuj PHP-FPM lub Apache, w zależności od konfiguracji:

sudo systemctl restart php8.2-fpm
sudo systemctl restart apache2
Info
Jeśli nie masz dostępu do php.ini (hosting współdzielony), część firm hostingowych pozwala nadpisać ustawienia przez .user.ini w katalogu strony: curl.cainfo = „/home/twojkonto/cacert.pem”

Rozwiązanie 3: gdy korzystasz z HestiaCP lub własnego VPS

Przy własnym zarządzaniu serwerem warto sprawdzić dodatkowo dwie rzeczy:

  • Wersję OpenSSL – jeśli system jest stary (np. Ubuntu 18.04 wychodzące z supportu), sam upgrade ca-certificates może nie wystarczyć, bo brakuje nowszych certyfikatów root w repozytoriach. Pomaga wtedy tylko aktualizacja systemu lub ręczne wgranie cacert.pem.
  • Osobne wersje PHP dla różnych domen – jeśli hostujesz wiele stron z różnymi wersjami PHP, upewnij się, że curl.cainfo jest ustawiony dla właściwej wersji PHP-FPM, bo każda wersja ma osobny php.ini.
Ostrzeżenie
Na przestarzałych systemach operacyjnych sam update pakietu ca-certificates może nie rozwiązać problemu, jeśli repozytoria systemowe też są nieaktualne. W takiej sytuacji jedynym pewnym rozwiązaniem jest ręczne wgranie świeżego cacert.pem lub aktualizacja systemu.

Jak zweryfikować, że problem został rozwiązany

Z poziomu serwera możesz sprawdzić połączenie SSL bezpośrednio przez cURL w terminalu:

curl -v https://api.wordpress.org/

Jeśli w logu nie pojawia się błąd unable to get local issuer certificate, konfiguracja jest już poprawna i WordPress powinien znów pobierać aktualizacje bez problemu.

Dodatkowo warto sprawdzić z poziomu PHP, jaki plik CA jest faktycznie używany:

<?php
var_dump(ini_get('curl.cainfo'));
var_dump(ini_get('openssl.cafile'));

Podsumowanie

Błąd cURL 60 w WordPressie to w większości przypadków kwestia nieaktualnego pliku certyfikatów root, a nie awarii samego WordPressa.

KrokDziałanie
1Podmień wp-includes/certificates/ca-bundle.crt na aktualny
2Zaktualizuj ca-certificates na poziomie systemu
3Wgraj ręcznie cacert.pem i wskaż go w php.ini lub .user.ini
4Zrestartuj PHP-FPM/Apache i przetestuj przez curl -v
Sukces
W praktyce najczęściej wystarcza krok 1 lub 2 – do ręcznej konfiguracji cacert.pem trzeba sięgać głównie na starszych lub nieaktualizowanych serwerach.

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Koszyk

Zamknij

Twój koszyk jest pusty.

Rozpocznij zakupy

Pasek boczny