私のサーバーは、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;
ます。
しかし、証明書で動作させたい