Как заставить TLS 1.2 с SoapClient? - PullRequest
0 голосов
/ 02 июля 2018

Я использую PSP, который недавно переключился на поддержку только TLS 1.2 (согласно PCI-DSS).

В приложении php7 я могу подключиться к их SOAP API. Однако после их обновления я получаю сообщение об ошибке SSL, указывающее, что их сервер не поддерживает мою версию TLS. Я запустил wireshark и могу подтвердить, что есть только client hell o, поэтому server hello, и это на TLS 1.0.

Я использую следующий код:

$this->soapClient = new SoapClient('some/wsdl'), [
    'location' => 'https://endpoint.of.server',
    'soap_version' => SOAP_1_1,
    'stream_context' => stream_context_create([
        'ssl' => [
            'local_cert' =>  '/path/to/client.crt',
            'crypto_method' =>  STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
        ],
    ])
]);

Однако этот код по-прежнему использует TLS 1.0, а не требуемый TLS 1.2.

Версия

OpenSSL 1.1.0h 27 Mar 2018

PHP 7.1.6-1~ubuntu16.04.1+deb.sury.org+1 (cli) ( NTS ).

1 Ответ

0 голосов
/ 13 июля 2018

Как оказалось, приведенный выше код на 100% правильный.

В моем случае ошибка лежала где-то в сертификате. По неизвестным причинам наш собственный клиентский сертификат SSL не справился с TLS 1.2. После того, как мы сгенерировали новый сертификат, все заработало как по волшебству.

Вещи, которые я пробовал / проверял

  • Убедитесь, что у вас поддерживается openssl verion (> = 1.0.1)
  • Рассмотрим ручное задание шифров
  • Отладка соединения с помощью Wireshark для проверки протокола

Кроме того, взгляните на Как заставить определенную версию TLS в контексте потока PHP для транспорта ssl: //?

...