소소한 팁
Flutter(dart) https SSL 인증서 오류 (proxy, self-signed 인증서)
생계형 개발자!
2022. 5. 11. 07:46
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