Problem z PHP SoapClient i SSL - crypto enabling timeout
ProgramowanieOperując klasą SoapClient w celu połączenia się z web serwisem opatrym o SOAP poprzez protokół https/ssl, możemy natknąć się na dość enigmatyczny błąd, który może przyprawić nas o ból głowy. Co więcej pojawia się on tylko na specyficznych systemach operacyjnych z rodziny Linux...
Operując klasą SoapClient w celu połączenia się z web serwisem opatrym o SOAP poprzez protokół https/ssl, możemy natknąć się na dość enigmatyczny błąd, który może przyprawić nas o ból głowy. Co więcej pojawia się on tylko na specyficznych systemach operacyjnych z rodziny Linux - najczęściej Ubuntu i wynika on z błędu biblioteki openssl.
Przykładowo:
$soap = new SoapClient('https://domena.pl/wsdl');
Może w rezultacie dać taki oto błąd:
PHP Warning: SoapClient::SoapClient(): Failed to enable crypto in ...
Jeśli serwer HTTPS ma wsparcie jedynie dla TLS 1.0 (nie kolejnych wersji czyli 1.1-2), SSLv2 lub SSLv3, gdzie w szczególności używa się szyfrów RC4-SHA można obejść ten problem w następujący sposób:
$soap = new SoapClient('https://domena.pl/wsdl', [ 'stream_context' => stream_context_create([ 'ssl' => [ 'ciphers' => 'RC4-SHA' ] ]) ]);
Cały trik z obejściem wyżej wspomnianego błędu polega na zastąpieniu domyślnego kontekstu przy wywołaniu klasy SoapClient, swoim z dodatkową opcją zastosowania szyfrów RC4-SHA. To powinno skutecznie rozwiązać problem i zaoszczędzić wam dobrych kilka godzin szukania igły w stogu siana.
- Tags
- programowanie
- know-how
- php