Dart 颤振图像。网络(…)抛出握手异常

Dart 颤振图像。网络(…)抛出握手异常,dart,flutter,Dart,Flutter,几天前,我开始使用颤振和飞镖,目前进展顺利。非常好的工具,但是对于应用程序,我正在构建我需要一张来自Web服务器a的图片,每当我尝试使用new Image.network(URL)调用它时,会引发此异常: 握手例外: Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(ssl_cert.c:345)). 如果有人能帮助我,请提前感谢。您是否使

几天前,我开始使用颤振和飞镖,目前进展顺利。非常好的工具,但是对于应用程序,我正在构建我需要一张来自Web服务器a的图片,每当我尝试使用
new Image.network(URL)
调用它时,会引发此异常:

握手例外:

Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(ssl_cert.c:345)).

如果有人能帮助我,请提前感谢。

您是否使用Windows并使用卡巴斯基防病毒软件?我不知道所有的技术细节,但是这个杀毒软件会影响握手。禁用它应该会有所帮助。
这里有一个类似的问题,不过我想这不是Dart SDK的问题:

这对我来说很好

var image = new Container(
    width: 100.0,
    height: 100.0,
    decoration: new BoxDecoration(
      borderRadius: new BorderRadius.circular(3.0),
      color: const Color(0xff7c94b6),
      image: new DecorationImage(
        image: new NetworkImage(
            "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRwlzVkvBV1EA_w87NFvYAhT-EC2HMRpfTuRFtHE7nXE5GPvnsQ"),
        fit: BoxFit.cover,
      ),
    ),
  );
请检查此项以添加badCertificateCallback

_client = new HttpClient();
_client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;

跳过SSL认证问题并解决
Image.network(url)
问题的一种方法是使用以下代码:

import 'dart:io';

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());
}

我也有同样的问题!能够解决it应用程序(这是一个与服务器相关的问题,所以最好在服务器端解决!) sol:在本地添加用户信任证书!或者跳过检查! 我选择添加证书。 将您的证书(针对您的特定域)作为资产添加到pubsec.yaml文件中。(您可以从web浏览器中收集)

然后在发出网络请求之前,在应用程序中的某个位置添加以下代码。例如,在main函数中

void main() async{
 await WidgetsFlutterBinding.ensureInitialized();
  ByteData data = await 
  rootBundle.load('assets/raw/certificate.pem');
  SecurityContext context = SecurityContext.defaultContext;
  context.setTrustedCertificatesBytes(data.buffer.asUint8List());
  runApp(MyApp());
}

谢谢你的帮助。我发现了我的问题,这是一个证书问题,不知何故,我的应用程序没有在我的手机上找到正确的证书(可能是因为它将其视为模拟器?)。我试着用
badCertificateCallback
和一个正常的
HttpRequest
来完成它,但无法从数据中获取图像。服务器现在传输中间证书,这为我解决了问题。我尝试了你的代码,效果很好。我想这正是我想要的映像服务器。同意@JokingWolf:最好将中间证书添加到Web服务器/负载平衡器终止SSL连接的.pem文件中。与Comodo颁发的证书有相同的问题。我的Flatter应用程序失败,错误为CERTIFICATE\u VERIFY\u FAILED CERTIFICATE VERIFY FAILED:无法获取本地颁发者证书。添加中间证书修复了这个问题。我不使用卡巴斯基。谢谢你的输入。是的,这是可能的。请看:这是使用HttpClient覆盖所有API调用的完美解决方案。这种方法不会产生漏洞吗?中间的人和东西。好像这个问题应该在服务器上解决,而不是这样做。正如miguelps指出的,这是一个糟糕的解决方案,不应该用于生产代码!!!
void main() async{
 await WidgetsFlutterBinding.ensureInitialized();
  ByteData data = await 
  rootBundle.load('assets/raw/certificate.pem');
  SecurityContext context = SecurityContext.defaultContext;
  context.setTrustedCertificatesBytes(data.buffer.asUint8List());
  runApp(MyApp());
}