W SKRÓCIE
- Błąd "dh key too small" oznacza, że serwer używa klucza DH słabszego, niż dopuszcza domyślny poziom bezpieczeństwa OpenSSL.
- Można obniżyć poziom bezpieczeństwa (SECLEVEL) globalnie w OpenSSL albo tylko dla jednego połączenia.
- Dla cURL służy opcja CURLOPT_SSL_CIPHER_LIST, dla SoapClient - kontekst strumienia z opcją ciphers.
- Najlepszym rozwiązaniem jest poproszenie administratora serwera o klucz DH co najmniej 2048-bitowy.
Podczas pracy z PHP, szczególnie przy korzystaniu z cURL lub SOAP, możesz trafić na błąd:
SoapClient::__doRequest(): SSL operation failed with code 1. OpenSSL Error messages: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small
Oznacza on, że serwer docelowy proponuje klucz Diffie-Hellmana krótszy, niż pozwala domyślny poziom bezpieczeństwa OpenSSL na Twoim serwerze. Poniżej trzy sposoby rozwiązania problemu.
Krok 1: Ustawienie w konfiguracji OpenSSL
Otwórz plik konfiguracyjny OpenSSL, zwykle /etc/ssl/openssl.cnf, i zmień wartość parametru CipherString na DEFAULT:@SECLEVEL=1. Ta zmiana działa globalnie dla wszystkich połączeń na serwerze.
CipherString = DEFAULT:@SECLEVEL=1
Krok 2: PHP i cURL
Jeśli korzystasz z cURL, ustaw listę szyfrów tylko dla danego połączenia - bez zmiany konfiguracji całego serwera.
$ch = curl_init($url); curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'DEFAULT:@SECLEVEL=1'); // pozostałe opcje cURL... $response = curl_exec($ch);
Krok 3: PHP i SOAP
Dla SOAP przygotuj kontekst strumienia (stream context) z listą szyfrów i przekaż go do klienta SoapClient.
$streamContext = stream_context_create([ 'ssl' => [ 'ciphers' => 'DEFAULT:@SECLEVEL=1', ], ]); $client = new SoapClient(null, [ 'location' => $url, 'uri' => $url, 'stream_context' => $streamContext, ]);
Uwaga na bezpieczeństwo
Obniżenie SECLEVEL osłabia ochronę połączenia. Stosuj je tylko dla konkretnego połączenia i poproś administratora serwera docelowego o klucz DH co najmniej 2048-bitowy - wtedy obejście nie będzie potrzebne.
Podsumowanie
Po zastosowaniu powyższych kroków błąd związany z kluczem SSL powinien zniknąć. Śledź zmiany w konfiguracji serwerów, z którymi się łączysz, i korzystaj z aktualnych wersji bibliotek - to podstawa bezpieczeństwa aplikacji.
Potrzebujesz wsparcia przy integracji?
Pomożemy z integracjami SOAP i REST, aktualizacją serwerów i utrzymaniem aplikacji.

