我的服务器在调用其 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
两种方法:
1)useCertificateChain()
这接受一个文件路径。但是当我在我的资产文件夹('assets/raw/certificate.crt')中给出文件的路径时。它说找不到文件。
2)useCertificateChainBytes()
上面的代码就是使用这种方法的。但这也给了我类似(意外的文件结尾)的错误。
目前解决方案
我正在使用client.badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
.
但我想让它与证书一起使用