【发布时间】:2019-06-03 21:45:01
【问题描述】:
我的服务器在调用其 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; 绕过它。
但我想让它与证书一起使用
【问题讨论】: