Очень часто при переносе резервной копии Битрикс с одного сервера на другой мы прибегаем к помощи небезизвестного скрипта restore.php. Обычно с ним проблем не возникает, но бывают "особенные" случаи.
Мой случай:
Клиент дал доступ только к админке. Проект развернут на сервере с доступом только по https, с сертификатом от другого домена.
В итоге, когда начинаем делать до боли привычные действия, а именно, компируем ссылку на резервную копию в админке предоставленного сервера и вставляем в форму restore.php сервера куда переносим происходит:
Если вывод ошибок выключен, не выведет даже этого - просто мол невозможно загрузить хотя ссылка правильная. Включить доступ по http или менять сертификат возможности не было, поэтому начал поиск других вариантов.
Вариант был найден.
PHP функция которая валится при попытке загрузить данные с HTTPS с некорректным сертификатом (на момент написания данного поста 2425 строка файла restore.php) имеет вид:
В переменной $context задаются настройки контекста функции stream_socket_client, которая собственно и инициирует подключение. Как ее заставить игнорировать неправильный домен сертификата - очень просто, нужно просто в контекст добавить:
По итогу код функции должен иметь вот такой вид:
Применяем эти изменения в restore.php и загрузка идет без проблем. Информация актуальна на 17.11.2019.
ВНИМАНИЕ! Производя данные манипуляции с файлом restore.php вы отключаете механизмы проверки SSL. Это крайне негативно сказывается на безопасности. Делайте это только в том случае если понимаете что делаете.
Всем спасибо за внимание, возможно кому-то пригодится.
Мой случай:
Клиент дал доступ только к админке. Проект развернут на сервере с доступом только по https, с сертификатом от другого домена.
В итоге, когда начинаем делать до боли привычные действия, а именно, компируем ссылку на резервную копию в админке предоставленного сервера и вставляем в форму restore.php сервера куда переносим происходит:
Warning: stream_socket_client(): Peer certificate CN did not match expected |
Вариант был найден.
PHP функция которая валится при попытке загрузить данные с HTTPS с некорректным сертификатом (на момент написания данного поста 2425 строка файла restore.php) имеет вид:
$context = stream_context_create( array( 'ssl' => array( 'verify_peer' => false, 'allow_self_signed' => true, ) ) ); $sockethandle = stream_socket_client(($ssl ? 'ssl://' : '').$host.':'.$port, $error_id, $error_msg, 10, STREAM_CLIENT_CONNECT, $context); |
'verify_peer' => false, 'verify_peer_name' => false, |
$context = stream_context_create( array( 'ssl' => array( 'verify_peer' => false, 'allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false, ) ) );$sockethandle = stream_socket_client(($ssl ? 'ssl://' : '').$host.':'.$port, $error_id, $error_msg, 10, STREAM_CLIENT_CONNECT, $context); |
ВНИМАНИЕ! Производя данные манипуляции с файлом restore.php вы отключаете механизмы проверки SSL. Это крайне негативно сказывается на безопасности. Делайте это только в том случае если понимаете что делаете.
Всем спасибо за внимание, возможно кому-то пригодится.