首页 > 解决方案 > 尝试使用 dio 传递客户端证书时收到空白 httpException 消息

问题描述

我在尝试使用 Dio 包提交客户端证书时收到空白 httpException 消息。 DioErrorType (DioErrorType.DEFAULT) : HttpException (HttpException: , uri = [API_PATH])

与邮递员请求时,相同的证书正在工作。

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/10.0
X-Powered-By: ASP.NET
Date: Thu, 21 Jan 2021 05:56:55 GMT 

下面是我正在使用的代码

 Future<List<int>> loadCertificate(String assetPath) async {
    return (await rootBundle.load(assetPath)).buffer.asUint8List();
  } 
final List<int> certificateChainBytes =
        await loadCertificate('assets/certs/client-cert1.pfx');
    final List<int> keyBytes =
        await loadCertificate('assets/certs/client-cert1.pfx');
final Dio dio = Dio();
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
        (client) {
         final SecurityContext sc = SecurityContext()
                                  ..useCertificateChainBytes(certificateChainBytes, password: 'Secret')
                                    ..usePrivateKeyBytes(keyBytes, password: 'Secret');
      final HttpClient httpClient = HttpClient(context: sc);
     httpClient.badCertificateCallback =
              (X509Certificate cert, String host, int port) {
            print('badcertificatecallback');
            print(cert.issuer);
            return true;
          };
          return httpClient;
        };
  try {
      url = url.contains('http') ? url : '${PsConfig.ps_app_url}$url';
      print('API Response from $url');
      final Response response =
          await dio.get(url, options: Options(headers: getHeaders()));

      return processHttpResponse(obj, response);
    } on diolib.DioError catch (e) {
      inspect(e);
      return processDioResponse(obj, e);
    } finally {
      dio.close();
    }

我对此很陌生并且被卡住了。先感谢您。

标签: flutterclient-certificatesiis-10diohttpexception

解决方案


推荐阅读