[Android, Mac] Flutter로 https SSL 접속시 인증 오류 뜰 때(proxy 등)
사무실에서 Android Studio 설치해서 Flutter를 실행해보는데.. 교재보고 통신을 하려고 하니, SSL접속이 안된다.
아마 업무망→인터넷망 나가면서 SSL쪽에 뭔가 제한이 있는 것 같은데.. 결국 검색해서 조치했다.
참고한 원글은 아래 링크이며, 내가 나중에 참고하려고 이쪽에도 적어놓는다.
https://sw-architect.tistory.com/21
Flutter에서 import ‘package:http/http.dart’ as http; 해서 API 정보를 받아오는데.. 사무실 PC에서 하니 다음과 같은 오류가 뜬다. (같은 소스를 노트북에서 하면 정상 작동 되니.. 뭔가 환경적인 문제이다.)
에러 메시지는 다음과 같다.
E/flutter (23242): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error: E/flutter (23242): CERTIFICATE_VERIFY_FAILED: self signed certificate in certificate chain(handshake.cc:359)) E/flutter (23242): #0 _SecureFilterImpl._handshake (dart:io-patch/secure_socket_patch.dart:104:46) E/flutter (23242): #1 _SecureFilterImpl.handshake (dart:io-patch/secure_socket_patch.dart:147:25) E/flutter (23242): #2 _RawSecureSocket._secureHandshake (dart:io/secure_socket.dart:803:54) E/flutter (23242): #3 _RawSecureSocket._tryFilter (dart:io/secure_socket.dart:933:19) E/flutter (23242): <asynchronous suspension> E/flutter (23242):
뭐.. 결국 SSL Handshake할 때 인증오류라고 하는데.. 찾아보니 테스트나 내부용으로 사용하는 SSL인증서, 또는 proxy를 통해 연결할때 발생할 수 있단다.
다음과 같이 조치하면 된다고 해서 해봤는데, 일단 나는 해결!!
void main() { HttpOverrides.global = NoCheckCertificateHttpOverrides(); // 아래 클래스를 등록 runApp(const MyApp()); } // 클래스 추가 class NoCheckCertificateHttpOverrides extends HttpOverrides { @override HttpClient createHttpClient(SecurityContext? context) { // TODO: implement createHttpClient return super.createHttpClient(context) ..badCertificateCallback = (X509Certificate cert, String host, int port) => true; } }
결국 인증을 무시하겠다는얘기니.. 아무상황이나 하면 안되고,
제한된 환경, 특수한 환경에서만 적용하시길.(나는 그냥 공부목적으로 교재에 있는 소스코드 작성할때나 쓸꺼니.. ^^)