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.
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.
- Pobierz aktualny plik z najnowszej wersji WordPressa (najnowsze archiwum ZIP z wordpress.org lub bezpośrednio z repozytorium GitHub WordPress Core).
- Podmień plik na serwerze przez FTP/SFTP lub panel hostingu w lokalizacji wp-includes/certificates/ca-bundle.crt.
- Ustaw uprawnienia 644 na pliku.
- Wyczyść ewentualny cache obiektowy (Redis/Memcached) i spróbuj ponownie.
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-certificatesNa serwerach z CentOS/AlmaLinux/RHEL:
sudo yum reinstall ca-certificates
sudo update-ca-trustRę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:
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
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.
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.
| Krok | Działanie |
| 1 | Podmień wp-includes/certificates/ca-bundle.crt na aktualny |
| 2 | Zaktualizuj ca-certificates na poziomie systemu |
| 3 | Wgraj ręcznie cacert.pem i wskaż go w php.ini lub .user.ini |
| 4 | Zrestartuj PHP-FPM/Apache i przetestuj przez curl -v |







