ssl — Попытка получить потоки PHP, работающие с Thawte TLS RSA CA G1 — внутренняя ошибка

Я пытаюсь получить PHP, принимающий сертификат, который принимает Chrome.

Я создал следующий минимальный воспроизводящий пример:

echo OPENSSL_VERSION_TEXT;

require 'vendor/autoload.php';
$fetch = new \ParagonIE\Certainty\RemoteFetch('/tmp/');
$latestBundle = $fetch->getLatestBundle();

$context = stream_context_create(
[
'ssl' => array(
'cafile' => $latestBundle->getFilePath(),
'SNI_enabled' => true,
)
]
);

$url = 'https://example.com:8080/x/y';

echo file_get_contents($url  . '?wsdl', false, $context);

я использую https://github.com/paragonie/certainty чтобы получить последние CAcerts.

Я получаю следующую ошибку

OpenSSL 1.0.2g  1 Mar 2016
PHP Warning:  file_get_contents():
SSL operation failed with code 1. OpenSSL Error messages:
error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert
internal error in /tmp/test/test.php on line 20
PHP Warning:  file_get_contents(): Failed to enable crypto in
/tmp/test/test.php on line 20
PHP Warning:  file_get_contents(https://example.com:8080/x/y?
wsdl): failed to open stream: operation failed in
/tmp/test/test.php on line 20

Что здесь не так?

К сожалению, я не могу поделиться URL-адресом (он все равно находится за брандмауэром).

Доступ к нему с помощью curl —insecure работает — но я действительно хотел бы правильно проверить сертификат CA

РЕДАКТИРОВАТЬ
SSLyze выводит это:

РЕЗУЛЬТАТЫ СКАНИРОВАНИЯ, К примеру, .COM:8080 ->
-------------------------------------------------- ----

* TLSV1_1 Cipher Suites:
Вперед Секретность ОК - Поддерживается
RC4 в норме - не поддерживается

Предпочтительно:
TLS_DHE_RSA_WITH_AES_256_CBC_SHA 256 бит
Принято:
TLS_RSA_WITH_AES_256_CBC_SHA 256 бит
TLS_DH_anon_WITH_AES_256_CBC_SHA ANONYMOUS
TLS_DHE_RSA_WITH_AES_256_CBC_SHA 256 бит
Не определено - произошла непредвиденная ошибка:
TLS_DHE_DSS_WITH_AES_256_CBC_SHA OpenSSLError - ошибка: 14094438: процедуры SSL: ssl3_read_bytes: внутренняя ошибка оповещения tlsv1


* TLSV1 Cipher Suites:
Вперед Секретность ОК - Поддерживается
RC4 в норме - не поддерживается

Предпочтительно:
TLS_DHE_RSA_WITH_AES_256_CBC_SHA 256 бит
Принято:
TLS_RSA_WITH_AES_256_CBC_SHA 256 бит
TLS_DH_anon_WITH_AES_256_CBC_SHA ANONYMOUS
TLS_DHE_RSA_WITH_AES_256_CBC_SHA 256 бит
Не определено - произошла непредвиденная ошибка:
TLS_DHE_DSS_WITH_AES_256_CBC_SHA OpenSSLError - ошибка: 14094438: процедуры SSL: ssl3_read_bytes: внутренняя ошибка оповещения tlsv1


* Сжать сжатие:
ОК - Сжатие отключено

* Справочная информация:
содержание
Отпечаток SHA1: c2b3ce5b0905caa2ec5998aacf074f99cffb0207
Общее имя: example.com
Эмитент: Thawte TLS RSA CA G1
Серийный номер: 10361996092389695445524615643169842847
Не раньше: 2018-12-05 00:00:00
Не после: 2020-12-04 12:00:00
Алгоритм подписи: sha256
Алгоритм открытого ключа: RSA
Размер ключа: 2048
Экспонент: 65537 (0x10001)
Альтернативные имена субъектов DNS: ['example.com']

Доверять
Проверка имени хоста: ОК - сертификат соответствует example.com
Android CA Store (9.0.0_r3): FAILED - сертификат НЕ Доверенный: невозможно получить сертификат локального эмитента
iOS CA Store (11): FAILED - сертификат НЕ Доверенный: невозможно получить сертификат локального эмитента
Java CA Store (jre-10.0.2): FAILED - сертификат НЕ Доверенный: невозможно получить сертификат локального эмитента
MacOS CA Store (High Sierra): FAILED - сертификат НЕ Доверенный: невозможно получить сертификат локального эмитента
Mozilla CA Store (2018-08-23): СБОЙ - Сертификат НЕ Доверенный: невозможно получить сертификат локального эмитента
Windows CA Store (2018-08-04): СБОЙ - сертификат НЕ Доверенный: невозможно получить сертификат локального эмитента
Symantec 2018 Устаревший: ОК - Сертификат не выдан Symantec
Полученная цепочка: example.com
Проверенная цепочка: ОШИБКА - Не удалось создать проверенную цепочку (сертификат ненадежен?)
Полученная цепочка содержит привязку: ОШИБКА - Не удалось создать проверенную цепочку (сертификат не является доверенным?)
Полученный цепной заказ: ОК - заказ действителен
Проверенная цепочка содержит SHA1: ОШИБКА - Не удалось создать проверенную цепочку (сертификат ненадежен?)

расширения
OCSP Must-Staple: НЕ ПОДДЕРЖИВАЕТСЯ - расширение не найдено
Прозрачность сертификата: ОК - 3 SCT включены

OCSP Сшивание
НЕ ПОДДЕРЖИВАЕТСЯ - сервер не отправил ответ OCSP

* OpenSSL CCS Инъекция:
ОК - Не уязвим для инъекции OpenSSL CCS

* SSLV3 Cipher Suites:
Сервер отклонил все комплекты шифров.

* SSLV2 Cipher Suites:
Сервер отклонил все комплекты шифров.

* Поддержка Возобновления:
С идентификаторами сеансов: OK - поддерживается (5 успешных, 0 неудачных, 0 ошибок, 5 попыток).
С билетами TLS: НЕ ПОДДЕРЖИВАЕТСЯ - билет TLS не назначен.

* Атаки понижения рейтинга:
TLS_FALLBACK_SCSV: VULNERABLE - Набор шифров сигнализации не поддерживается

* TLSV1_3 Cipher Suites:
Сервер отклонил все комплекты шифров.

* OpenSSL Heartbleed:
ОК - Не уязвим для Heartbleed

* TLSV1_2 Cipher Suites:
Вперед Секретность ОК - Поддерживается
RC4 в норме - не поддерживается

Предпочтительно:
TLS_RSA_WITH_AES_256_CBC_SHA 256 бит
Принято:
TLS_RSA_WITH_AES_256_CBC_SHA 256 бит
TLS_DH_anon_WITH_AES_256_CBC_SHA ANONYMOUS
TLS_DHE_RSA_WITH_AES_256_CBC_SHA 256 бит
Не определено - произошла непредвиденная ошибка:
TLS_DHE_DSS_WITH_AES_256_CBC_SHA OpenSSLError - ошибка: 14094438: процедуры SSL: ssl3_read_bytes: внутренняя ошибка оповещения tlsv1


* Пересмотр сессии:
Инициированное клиентом повторное согласование: Уязвимые - сервер учитывает повторные переговоры, инициированные клиентом
Безопасное повторное согласование: ОК - Поддерживается

* ROBOT Attack:
Хорошо - не уязвимы


Сканирование завершено за 9,31 с

1

Решение

Внутренняя ошибка устраняется следующим образом:

    $context = stream_context_create(
[
'ssl' => array(
'cafile' => $latestBundle->getFilePath(),
'SNI_enabled' => true,
'ciphers' => 'HIGH:TLSv1.2:TLSv1.1:TLSv1.0:SSLv3:SSLv2',
'verify_peer' => false,
'verify_peer_name' => false,
'crypto_disable_compression' => true,
'method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
'verify_depth' => 10,
)
]
);

Но все же я не могу проверить сертификат CA.

В Chrome все работает нормально.

Это потому, что Chrome делает несколько обходных путей, смотрите https://security.stackexchange.com/questions/199963/certificate-works-in-chrome-firefox-but-not-with-curl-unable-to-get-local-is

Поэтому я должен ждать, пока цепь не будет настроена правильно.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector