Получите сертификат клиента вstream_socket_server без параметраverify_peer, для которого установлено значение true для сPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Получите сертификат клиента вstream_socket_server без параметраverify_peer, для которого установлено значение true для с

Сообщение Anonymous »


Я пытаюсь написать сервер Gemini на PHP.
Чтобы он работал правильно при любых обстоятельствах, мне нужно получить сертификат клиента, если клиент его отправляет.

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

$context =stream_context_create(опции: [ 'ssl' => [ 'local_cert' => "путь/к/файлу", 'local_pk' => "путь/к/ключу", 'allow_self_signed' => правда, 'verify_peer' => ложь, 'capture_peer_cert' => правда, ], ]); $socket =stream_socket_server( адрес: "tls://localhost:1965", контекст: $контекст ); Я могу принять такие связи

$connection =stream_socket_accept( сокет: $сокет, тайм-аут: -1, имя_парата: $peer ); Соединения могут быть установлены без ошибок. Но когда клиент отправляет сертификат, я не могу его получить, поскольку peer_certificate в параметрах контекста не установлен.

$streamParams =stream_context_get_params($resource); $clientCertificate = $streamParams['options']['ssl']['peer_certificate'] ?? нулевой; # всегда ноль Когда я устанавливаю для verify_peer значение true, тогда для peer_certificate устанавливается объект OpenSSLCertificate. Но тогда запросы от клиента без сертификата приводят к false $connection и этим ошибкам:

Предупреждение:stream_socket_accept(): не удалось получить сертификат узла в [...] Предупреждение:stream_socket_accept(): не удалось включить шифрование в [...] Предупреждение:stream_socket_accept(): Не удалось принять: Успех в [...] Я проверил реализации серверов Gemini на Python, и в Python есть verify_mode, для которого можно установить значение CERT_OPTIONAL.
https://docs.python.org/3/library/ssl.h ... T_OPTIONAL

Я не смог найти ничего подобного для PHP. Есть ли вообще способ получить сертификат клиента?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»