7

私のサーバーは、HTTPS API を呼び出すときに自己署名証明書を提供します。フォルダーに証明書ファイルがあり、assetそのパスを参照しましpubspec.yaml た に証明書を渡し、SecurityContextそのコンテキストを使用してHttpClient. しかし、証明書を渡す方法が機能しSecurityContextていません。コードは次のとおりです。

Future<ByteData> getFileData(String path) async {
    return await rootBundle.load(path);
}

void initializeHttpClient() async {
    try {
         Future<ByteData> data = getFileData('assets/raw/certificate.crt');
         await data.then((value) {
             var context = SecurityContext.defaultContext;
             context.useCertificateChainBytes(value.buffer.asInt8List());
             client = HttpClient(context: context);
         });

    } on Exception catch (exception) {
         print(exception.toString());
    }
}

SecurityContextは 2 つの方法があります
。1)useCertificateChain()これはファイル パスを受け入れます。しかし、アセット フォルダー ('assets/raw/certificate.crt') 内のファイルのパスを指定すると、ファイルが見つかりませんと表示されます。
2)useCertificateChainBytes()上記のコードはこのメソッドを使用しています。しかし、これにより(予期しないファイルの終わり)のようなエラーも発生します。

現時点での解決策

を使用してバイパスしていclient.badCertificateCallback = (X509Certificate cert, String host, int port)=> true;ます。

しかし、証明書で動作させたい

4

1 に答える 1