Можно ли POST / GET данные на защищенный сайт TLSv1.1 + без curl и wget?

Я в этой очень неудачной ситуации

  • Мой веб-сайт использует устаревшее программное обеспечение (применяются исправления безопасности) с OpenSSL 0.9.8o 01 июня 2010 года, которое не поддерживает TLSv1.1 / 1.2
  • У меня также есть платежный шлюз, совместимый с PCI DSS, поэтому там отключены SSL и ранний TLS.

Мой сайт раньше обменивался данными с платежным шлюзом, но поскольку TLSv1.0 отброшен, я больше не могу использовать библиотеку php cURL или даже file_get_contents() (или wget / lynx / curl через оболочку)

Есть ли обходной путь, любой вариант, как подключить защищенный сервер TLSv1.1 + без использования встроенных библиотек?

Я знаю, что некоторые классы существуют в PHP, как phpseclib который является SSH клиентом, отлично подходит для людей, которые не могут использовать Модуль SSH2

Существует ли что-то подобное для PHP? Есть ли способ, которым я могу подключиться к своему шлюзу?

Пока что моя лучшая идея — подключиться к шлюзу через другой сервер (с обновленным программным обеспечением).

8

Решение

Однажды я использовал утилиту под названием Stunnel для моего не-TLS клиента, цитата с сайта:

Stunnel — это прокси, разработанный для добавления функциональности шифрования TLS к существующим клиентам и серверам без каких-либо изменений в коде программ. Его архитектура оптимизирована для обеспечения безопасности, переносимости и масштабируемости (включая распределение нагрузки), что делает его пригодным для крупных развертываний.

4

Другие решения

Есть ли обходной путь, любой вариант, как подключить защищенный сервер TLSv1.1 + без использования встроенных библиотек?

Я могу думать о пяти обходных путях:

1) Возможно (но сложно) установить несколько версий OpenSSL (или даже Curl). Вы даже можете использовать LD_PRELOAD_LIBRARY, чтобы сделать существующую бинарную библиотеку использования из другого места. Я думаю, что это грязный способ сделать это.

2) Это было бы очень просто с Docker. К сожалению, для этого требуется современное ядро, поэтому вы, вероятно, не сможете установить его на свой сервер. Но вы можете установить более современную ОС, а затем установить сервер в Docker-контейнер со старой ОС. Но это может быть примерно такая же работа, как перевод вашего сайта на новую ОС.

3) Вместо Docker просто используйте chroot, В новом окне используйте «ldd», чтобы найти все зависимости. Скопируйте их (плюс завиток) в chroot. Скопируйте этот каталог на ваш сервер и запустите «chrooot dir curl». Двоичный файл увидит новые библиотеки и будет работать. Это займет всего несколько минут, чтобы настроить для кого-то, кто знает, что они делают.

4) Используйте статически связанную версию curl, в которой скомпилирован более новый OpenSSL.

5) Используйте программу, которая не использует OpenSSL. Например, некоторые программы go (lang) используют свое собственное шифрование и компилируют в статический двоичный файл. Например: https://github.com/astaxie/bat

Первые 2 могут быть немного непрактичными в вашей настройке, но любой из последних 3 будет работать.

3

Мне понравилась ваша первоначальная идея прокси-сервера на другой сервер, за исключением того, что вы обходите ограничения безопасности, наложенные шлюзом, и при работе с информацией об оплате это, вероятно, не идея.

Однако, если вы можете запустить экземпляр Vagrant на своем собственном сервере с обновленными библиотеками, то вы можете передать незащищенный запрос на экземпляр Vagrant на локальном хосте, и он не покидает поле, тогда из экземпляра Vagrant, который обновил библиотеки, безопасная связь с вашим шлюзом.

2

Я собирался предложить Stunnel. НО dafyc хорошо отмечен.

Эти ограничения PCI не реализованы, чтобы замедлить людей (только .. смеется). Они существуют для защиты.

Вы решите свою проблему с Stunnel.
Но почему бы не обновить сервер сайта?

Вы определили устаревший SSL, но как сервер будут доступны и другие ошибки.

Если они исследуют какую-то другую слабость и получат доступ с правами root, у них будет пароль от stunnel, чтобы начать исследовать, что находится в канале.

Так что это не кажется достаточно хорошим, чтобы гарантировать надежность, которую PCI хочет, чтобы вы имели.

1

Я уже опубликовал один ответ, но потом я прочитал в комментариях, что вы не можете установить какие-либо инструменты на сервер. Вы можете использовать собственные функции PHP, называемые Потоки PHP. Это пример кода для старого Twitter API:

  $url = 'https://api.twitter.com/1/statuses/public_timeline.json';
$contextOptions = array(
'ssl' => array(
'verify_peer'   => true,
'cafile'        => '/etc/ssl/certs/ca-certificates.crt',
'verify_depth'  => 5,
'CN_match'      => 'api.twitter.com',
'disable_compression' => true,
'SNI_enabled'         => true,
'ciphers'             => 'ALL!EXPORT!EXPORT40!EXPORT56!aNULL!LOW!RC4'
)
);
$sslContext = stream_context_create($contextOptions);
$result = file_get_contents($url, NULL, $sslContext);
1

Я нашел другое решение.

На защищенном сервере я установил два VirtualHosts — 443 для TLSv1.2 и еще один для моего сайта только с поддержкой TLSv1.0

Больше информации здесь: https://serverfault.com/a/692894/122489

Спасибо за все ответы.

0
По вопросам рекламы [email protected]