Grp c соединение в Flutter выдает сбой сертификата - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь подключиться к серверу, используя безопасный клиентский канал через grp c в моем приложении для флаттера.

Для этого администратор сервера предоставил мне файл client_certificate.pem, hostAddress и port для использования.

Я использую всю эту информацию для настройки безопасного канала клиента в моем приложении следующим образом:

// read certificate from assets and convert to int
final cert = await rootBundle.load('assets/certificates/client_certificate.pem');
final certAsList = cert.buffer
        .asUint8List(cert.offsetInBytes, cert.lengthInBytes)
        .map((uint8) => uint8.toInt())
        .toList();

// add credentials
final creds = ChannelCredentials.secure(certificates: certAsList)

// create secure channel
final secureChannel = ClientChannel(_hostAddress,
        port: _port, options: ChannelOptions(credentials: creds));

Предполагая, что весь приведенный выше код правильно, теоретически это все, что нужно для подключения к серверу, однако при попытке отправить запрос я получаю следующий ответ:

gRPC Error (14, Error connecting: HandshakeException: Handshake error in client (OS Error: SSLV3_ALERT_BAD_CERTIFICATE(tls_record.cc:587)))

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

Любые другие подсказки?

---------------- РЕДАКТИРОВАТЬ ------------------------

Я получаю 2 различных типа ошибок, в зависимости от конфигурации ChannelCredentials:

, если я кодирую его следующим образом:

final creds = ChannelCredentials.secure(
        certificates: certAsList, onBadCertificate: (cert, host) => true); 

Я получаю:

gRPC Error (14, Error connecting: HandshakeException: Handshake error in client (OS Error:SSLV3_ALERT_BAD_CERTIFICATE(tls_record.cc:587)))

Если я кодирую его, пропуская обратный вызов onBadCertificate:

 final creds = ChannelCredentials.secure(
        certificates: certAsList);

Я получаю:

gRPC Error (14, Error connecting: HandshakeException: Handshake error in client (OS Error:CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:354)))
...