Как мне получить доступ к информации о ssl-сертификате клиента grpc со стороны сервера?

#authentication #ssl #grpc

Вопрос:

Я тестирую приложение grpc клиент/сервер, так как это тест, и клиент, и сервер имеют самозаверяющие сертификаты. Я использовал SslCredentials и SslServerCredentials (на стороне сервера я передаю сертификат и ключ, на стороне клиента я передаю сертификат сервера, сертификат клиента и ключ клиента), и рукопожатие работает нормально. Однако, когда я пытаюсь получить доступ к информации о сертификате клиента со стороны сервера, я обнаружил, что в объекте AuthContext вообще нет соответствующей информации (я распечатал все свойства и не вижу ничего, связанного с сертификатом клиента). Что я здесь упускаю? Спасибо.

Комментарии:

1. Я понял, что не устанавливал правильные параметры аутентификации клиента на стороне сервера, когда это правильно установлено, я вижу соответствующую информацию в объекте AuthContext.

Ответ №1:

Да, AuthContext работает. Кроме того, вы можете получить программный доступ к информации о учетных данных через библиотеку трассировки каналов gRPC-Channelz.

Вот пример того, как его настроить: https://github.com/grpc/grpc/tree/master/examples/python/debug

Информация, которую вы ищете, находится на уровне сокета: https://github.com/grpc/grpc/blob/master/src/proto/grpc/channelz/channelz.proto#L240

В качестве альтернативы вы можете попробовать использовать инструмент командной строки (https://github.com/grpc-ecosystem/grpcdebug) для визуализации данных трассировки, собранных вами из приложения.