[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;
  }
}

결국 인증을 무시하겠다는얘기니.. 아무상황이나 하면 안되고,
제한된 환경, 특수한 환경에서만 적용하시길.(나는 그냥 공부목적으로 교재에 있는 소스코드 작성할때나 쓸꺼니.. ^^)

Loading

댓글 남기기