Я пытался заставить себя трепетать, добавляя клиентские сертификаты для запроса на сторонний сервер. Когда я выполняю следующий запрос, используя curl (и ввожу правильный пароль для закрытого ключа):
curl -v --cert client.crt --key client.key <url>
, я получаю правильный ответ. Однако, когда я пытаюсь сделать это во флаттере:
final certificate = await rootBundle.load('assets/client.crt');
final key = await rootBundle.load('assets/client.key');
final context = SecurityContext.defaultContext;
context.useCertificateChainBytes(certificate.buffer.asUint8List());
context.usePrivateKeyBytes(key.buffer.asUint8List(), password: '<password>');
final client = HttpClient(context: context);
final httpClient = IOClient(client);
final response = await httpClient.get('<url>');
Сервер немедленно закрывает соединение, со следующим исключением:
[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: Connection closed before full header was received
#0 IOClient.send (package:http/src/io_client.dart:65:7)
<asynchronous suspension>
#1 BaseClient._sendUnstreamed (package:http/src/base_client.dart:176:38)
#2 BaseClient.get (package:http/src/base_client.dart:35:7)
#3 main (package:page_route/main.dart:25:37)
<asynchronous suspension>
#4 _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:257:25)
#5 _rootRun (dart:async/zone.dart:1184:13)
#6 _CustomZone.run (dart:async/zone.dart:1077:19)
#7 _runZoned (dart:async/zone.dart:1619:10)
#8 runZonedGuarded (dart:async/zone.dart:1608:12)
#9 _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:249:5)
#10 _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
#11 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
Кто-нибудь знает, что я здесь не так делаю