Flatter grp c учетные данные с использованием файла .pem - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть приложение Flutter, которое должно общаться с сервером через защищенный клиентский канал через grp c.

Чтобы попытаться создать клиентский канал, я использую:

 final _channel = ClientChannel(_hostAddress,
      port: _port,
      options:
          const ChannelOptions(credentials: ChannelCredentials.secure(
            certificates: ??? ???
          )));

Для части certificates у меня есть только сертификат в файле .pem .

Документация на странице puv.dev здесь абсолютно бесполезен, поскольку он просто указывает, что параметр сертификаты представляет собой Список int

Как мне go из файла .pem в Список int ?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Поскольку Dart не имеет байтового типа, байтовый массив имеет вид List или Uint8List. Я полагаю, что если вы откроете файл .pem и прочитаете содержимое файла в байтах, вы получите свой список int

Future<Uint8List> readCert() async {
  final File f = File('cert.pem');
  final bytes = await f.readAsBytes();
  return bytes;
}
0 голосов
/ 30 апреля 2020

Несмотря на то, что ответ от @ alex_z может быть правильным для других случаев, похоже, что правильный способ сделать это (если файл сертификата находится где-то в активах, как в моем случае) - это сделать следующее:

final cert = await rootBundle.load('assets/certificate.pem');

final certAsList = cert.buffer
        .asUint8List(cert.offsetInBytes, cert.lengthInBytes)
        .map((uint8) => uint8.toInt())
        .toList();

Таким образом, его можно без проблем передать на ChannelCredentials.

...