2014-03-28 2 views
2

학교의 인트라넷에 연결하려고합니다. 다트 이외의 것으로 연결하는 것은 가능합니다 (Python, PHP, curl -s -L "https://intra.42.fr/?format=json" 등).SecureSocket을 사용하여 HandshakeException을 수정하는 방법은 무엇입니까?

그러나 Dart VM은 내 학교에서 사용중인 TLS 인증서가 불량하다고 간주합니다. 이 코드 :

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

나는 다음과 같은 예외가 :

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.<anonymous closure>.<anonymous closure> (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) 

질문 버그 리포트 that suggestsBypass Certificate Error Using Http 포인트 :

수신 거부 이온 매개 변수를 [SecureSocket] .initialize으로 설정하면 인증서 데이터베이스 (cert9.dbkey4.db이 들어있는 디렉토리)와 내장 된 잘 알려진 권한을 사용할 지 여부를 지정할 수 있습니다.

내 질문은 어떻게 그럴 수 있습니까?

답변

1

나는 당신이

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

dartdoc을 찾고 생각 badCertificateCallback

* Sets a callback that will decide whether to accept a secure connection 
* with a server certificate that cannot be authenticated by any of our 
* trusted root certificates. 
`(X509Certificate의 CERT는, 문자열 호스트, INT 포트) => 사실과 함께 작동하는 것 같다
+1

;'로 콜백. 불행하게도이 해결책은'http'가 아니라'HttpClient'에서만 작동합니다. – Diti