Самоподписанный сертификат для gRP C на флаттер - PullRequest
2 голосов
/ 16 января 2020

У меня есть приложение Flutter, которое связывается с сервером с помощью gRP C. Сервер использует самозаверяющий сертификат для TLS. Я добавил сертификат в свое приложение Flutter, и оно работает на Android. Однако iOS я получаю ошибку CERTIFICATE_VERIFY_FAILED. Разве iOS не разрешает самозаверяющие сертификаты?

Я настраиваю свой клиент gRP C следующим образом:

    var cert = await rootBundle.load('assets/cert.crt');
    var creds = ChannelCredentials.secure(
        certificates: cert.buffer.asUint8List().toList()
    );
    var channel = ClientChannel(
        host,
        port: port,
        options: new ChannelOptions(credentials: creds));
    return GrpcClient(channel);

1 Ответ

2 голосов
/ 01 марта 2020

Кажется, на iOS нет очевидного решения для добавления доверенного, самоподписанного root CA. Поскольку в рабочей области, скорее всего, будет общедоступный доверенный центр сертификации, вы можете обойти эту проблему, отключив проверку TLS для разработки only .

Вот соответствующий фрагмент моего полного примера репо :

Future<ClientChannel> makeChannel() async {
  final caCert = await rootBundle.loadString('assets/pki/ca/ca.crt');

  return ClientChannel(
    'localhost',
    port: 13100,
    options: ChannelOptions(
      credentials: ChannelCredentials.secure(
        certificates: utf8.encode(caCert),

        // --- WORKAROUND FOR SELF-SIGNED DEVELOPMENT CA ---
        onBadCertificate: (certificate, host) => host == 'localhost:13100',
      ),
    ),
  );
}

В этом случае мой сервер прослушивает localhost:13100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...