【问题标题】:SSL - SecurityContext - Unhandled Exception: FileSystemException: Cannot open file - Error: No such file or directory, errno = 2SSL - SecurityContext - 未处理的异常:FileSystemException:无法打开文件 - 错误:没有这样的文件或目录,errno = 2
【发布时间】:2019-06-29 06:22:23
【问题描述】:

当我尝试设置证书时,出现错误:

E/flutter ( 7195): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception: FileSystemException: Cannot open file, path = 'assets/ssl/STAR_octopusspace_com.crt' (OS Error: No such file or directory, errno = 2) E/flutter ( 7195): #0 _File.throwIfError (dart:io/file_impl.dart:643:7) E/flutter ( 7195): #1 _File.openSync (dart:io/file_impl.dart:487:5) E/flutter ( 7195): #2 _File.readAsBytesSync (dart:io/file_impl.dart:547:18) E/flutter ( 7195): #3 _SecurityContext.useCertificateChain (dart:io/runtime/binsecure_socket_patch.dart:175:40)

这就是我的代码的样子:

我不确定我应该把我的文件放在哪里。 有什么想法吗?

我已经在我的 yaml 文件中声明了 ssl 文件夹。

  uses-material-design: true
  assets:
      - assets/ssl/
      - assets/graphics/

更新:

将代码更改为:

    final List<int> certificateChainBytes =
        (await rootBundle.load('assets/ssl/STAR_octopusspace_com.crt')).buffer.asInt8List();
    context.useCertificateChainBytes(certificateChainBytes);
    final List<int> keyBytes =
    (await rootBundle.load('assets/ssl/client_octopusspace.key')).buffer.asInt8List();
    context.usePrivateKeyBytes(keyBytes);

但现在我收到此错误:

E/flutter (11733): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:TlsException:usePrivateKeyBytes 失败(操作系统错误:E/flutter (11733): KEY_VALUES_MISMATCH(ssl_cert.cc :494), errno = 0) E/flutter (11733): #0 _SecurityContext.usePrivateKeyBytes (dart:io/runtime/binsecure_socket_patch.dart:164:50)

【问题讨论】:

  • 我会使用asUint8List,但这可能没有任何区别。您的私钥可能受密码保护(应该是)。将密码作为第二个参数提供给usePrivateKeyBytes

标签: file ssl flutter filesystemexception


【解决方案1】:

这对我有用:

final SecurityContext context = SecurityContext.defaultContext;

final ByteData crtData = await rootBundle.load('assets/ssl/STAR_octopusspace_com.crt');
context.setTrustedCertificatesBytes(crtData.buffer.asUint8List());

final ByteData authoritiesBytes = await rootBundle.load('assets/ssl/STAR_octopusspace_com.ca-bundle');
context.setClientAuthoritiesBytes(authoritiesBytes.buffer.asUint8List());

final ByteData keyBytes = await rootBundle.load('assets/ssl/client_octopusspace.key');
context.usePrivateKeyBytes(keyBytes.buffer.asUint8List());

httpClient = HttpClient(context: context);

谢谢大家:)

【讨论】:

    猜你喜欢
    • 2022-12-16
    • 2020-02-15
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多