Flutter 또는 dart에서 https 통신 시에, 다음과 같은 인증서 오류가 발생하는 경우가 있습니다.
E/flutter (22784): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error:
E/flutter (22784): CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:393))
E/flutter (22784): #0 _SecureFilterImpl._handshake (dart:io-patch/secure_socket_patch.dar:104:46)
E/flutter (22784): #1 _SecureFilterImpl.handshake (dart:io-patch/secure_socket_patch.dart:147:25)
E/flutter (22784): #2 _RawSecureSocket._secureHandshake (dart:io/secure_socket.dart:803:54)
E/flutter (22784): #3 _RawSecureSocket._tryFilter (dart:io/secure_socket.dart:933:19)
…
테스트나 내부용으로 사용되는 SSL 인증서 또는 proxy를 통해 인터넷에 연결된 경우 등에 발생할 수 있죠.
이 경우, http와 관련된 어떤 패키지를 사용하던지, 다음과 같은 HttpOverrides 객체를 생성 및 지정해 주시면 됩니다.
void main() {
HttpOverrides.global = NoCheckCertificateHttpOverrides(); // 생성된 HttpOverrides 객체 등록
// ..
}
// ..
class NoCheckCertificateHttpOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
}
물론, 아무 통신이나 잘못된 인증서 유효성을 무시하는 것은 위험할 수 있으니, 제한된 환경이나 또는 특정 상황에서만 적용하셔야 합니다.
Written with ♥ by Vincent Han
'소소한 팁' 카테고리의 다른 글
JetBrains IDE Terminal에서 vi 명령 모드(escape) 이동이 안되는 경우 설정 방법 (0) | 2021.05.26 |
---|---|
Go 언어에서 프로세스 실행 타임아웃(timeout) 지정하기 (0) | 2021.02.08 |
IntelliJ IDEA에서 maven이 반영되지 않을 때... (0) | 2020.12.03 |
JSON to Go struct (0) | 2020.11.30 |
Generic Methods를 통해 Spring Bean을 casting 없이 처리하는 Utility 클래스 (0) | 2020.10.27 |