При согласовании соединения с сервером ваша библиотека TLS, предположим, openSSL, сообщит серверу, какая у вас максимальная поддерживаемая версия. Затем сервер выберет версию, которую он поддерживает, а клиент - обе. Итак, если ваша система client поддерживает TLS1.2, вероятно, с вашей стороны никаких действий не требуется.
Поддержка TLS 1.2 была добавлена в OpenSSL в 1.0.1. Если вы используете el6 или новее и обновляете свои пакеты, все будет в порядке. Проверьте свою версию следующим образом:
# openssl version
> OpenSSL 1.0.2k-fips 26 Jan 2017
Вы можете проверить, какие протоколы / шифры поддерживает сервер, с помощью этой команды nmap:
nmap --script ssl-enum-ciphers -p 443 stackoverflow.com
Теперь, если вы хотите проверить сбой при использовании TLS1.1, или принудительно использовать шифр или что-то еще, вам нужно будет использовать PHP stream_context_create
.
С помощью приведенного ниже кода вы можете принудительно использовать TLS1.2, установив crypto_method
в
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
. Или, может быть, более полезным для того, что вы просите, вы можете проверить сбой при принудительном использовании STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT
.
<?php
$options = ['trace' => 1,
'soap_version' => SOAP_1_2,
'exceptions' => true,
'location' => 'https://stackoverflow.com/foo',
'uri' => "https://stackoverflow.com/bar",
'stream_context' => stream_context_create([
'ssl'=> [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT,
'ciphers' => 'SHA256'
]
])];
$client = new SoapClient(null, $options);
try {
$response = $client->getFoo();
} catch (\Exception $e){
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
throw $e;
}
//OR, an even easier test with out a Soap Client...
$opts = [
'ssl'=> [
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT,
'ciphers' => 'SHA256',
'verify_peer' => false,
'verify_peer_name' => false
]
];
$context = stream_context_create($opts);
$fp = fopen('https://stackoverflow.com', 'r', false, $context);
Если что-то работает с 1.2, и вы можете сгенерировать ошибку, скажем, 1.1, то вы можете быть уверены, что все в порядке. Ошибки будут выглядеть следующим образом:
Предупреждение: fopen (): операция SSL не выполнена с кодом 1. Ошибка OpenSSL
сообщения: ошибка: 140830B5: подпрограммы SSL: ssl3_client_hello: без шифров
доступны
fopen (): не удалось включить шифрование
Говоря о версии SOAP 1.1 против 1.2 , это просто разные стандарты W3C для Simple Object Access Protocol . Подробнее о некоторых отличиях можно узнать здесь .
Я просто скажу в заключение, что я не проверял это в PHP 5.5, это настолько старая версия, что в настоящее время у меня нет простого способа раскрутить ее. Думаю, что это все еще применимо.