一个同事给我一个Flutter项目,尝试在iOS中构建应用程序(我使用Mac,我们都使用Android Studio)。一切正常,除了以下错误:
Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: ok(handshake.cc:363))
如果我使用HTTP而不是HTTPS,则可以正常工作。我的同事说他通过添加以下代码来解决:
client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
这行代码也位于我的项目中,因为源是相同的。那么,为什么在Android上却不能使用它呢?
答案 0 :(得分:8)
所有http上ssl认证问题的最佳方法 请求
在两个平台(android和ios)上均可使用
class MyHttpOverrides extends HttpOverrides{
@override
HttpClient createHttpClient(SecurityContext context){
return super.createHttpClient(context)
..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
}
}
void main(){
HttpOverrides.global = new MyHttpOverrides();
runApp(new MyApp());
}
答案 1 :(得分:1)
老问题,但我的解决方法是确保在客户端上正确设置时间/日期
答案 2 :(得分:0)
检查您使用的https证书,我认为iOS进行https连接时比android采取更严格的措施。为了安全起见,请尝试更新服务器证书。
答案 3 :(得分:0)
如果您已添加此行,则此操作应在ios上有效
client.badCertificateCallback = (X509Certificate cert, String host, int port)
=> true;
因此,请仔细检查您是否为请求使用了相同的客户端实例,并且在设置badCertificateCallback参数之后是否正在发出请求