2 Stimmen

Wie Sie einen SecureSocket verwenden, um eine HandshakeException zu beheben?

Ich versuche, mich mit dem Intranet meiner Schule zu verbinden. Eine Verbindung mit allem außer Dart ist möglich (in Python, PHP, mit curl -s -L "https://intra.42.fr/?format=json" und so weiter).

Aber die Dart-VM betrachtet das TLS-Zertifikat, das an meiner Schule verwendet wird, als schlecht. Mit diesem Code:

# pubspec.yaml
name: handshake-fail
dependencies:
  http: any

import 'package:http/http.dart' as http;

main() { 
  var client = new http.Client();
  client.post('https://intra.42.fr/?format=json', body: {"login": "test", "password": "test"})
    .then((response) => print(response.body)
    );
}

Ich bekomme die folgende Ausnahme:

Uncaught Error: HandshakeException: Handshake error in client (OS Error: Peer's Certificate issuer is not recognized., errno = -8179)
Unhandled exception:
HandshakeException: Handshake error in client (OS Error: Peer's Certificate issuer is not recognized., errno = -8179)
#0      _rootHandleUncaughtError.. (dart:async/zone.dart:700)
#1      _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:23)
#2      _asyncRunCallback (dart:async/schedule_microtask.dart:32)
#3      _asyncRunCallback (dart:async/schedule_microtask.dart:36)
#4      _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:119)

Die Frage Bypass Certificate Error Using Http verweist auf einen Fehlerbericht der vorschlägt:

Optionale Parameter für [SecureSocket].initialize erlauben es Ihnen, eine Zertifikatsdatenbank (ein Verzeichnis mit cert9.db und key4.db) zu spezifizieren, und ob die integrierten bekannten Autoritäten verwendet werden sollen.

Meine Frage ist, wie man das macht?

1voto

Günter Zöchbauer Punkte 549460

Ich denke, du suchst nach diesem

var cl = new HttpClient();
cl.badCertificateCallback = () => print(x);

Dart-Dokumentation von badCertificateCallback

* Setzt einen Callback, der entscheidet, ob eine sichere Verbindung akzeptiert werden soll
* mit einem Serverzertifikat, das von keinem unserer vertrauenswürdigen Stammzertifikate authentifiziert werden kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X