Programing/Flutter

[Flutter] HandshakeException: Handshake error in client (OS Error: CERTIFICATE_VERIFY_FAILED)

뇌님 2024. 5. 19. 00:51
반응형

 

앱에서 서버로 request를 보내는 과정에서 다음과 같은 에러가 발생했습니다.

Handshake error in client

 

원인은 요청한 서버의 인증서(CA)가 공인된 인증서가 아니기 때문입니다.

예를 들어 이런 경우.

 

 

권장할 수 없는 방법이긴 하지만, 우회/무시 할 수 있는 방법은 있습니다.

 

 

방법

참조: https://stackoverflow.com/questions/54928080/flutter-https-handshake-error-in-client-os-error-certificate-verify-failed-ok

 

1. main.dart에 새로운 MyHttpOverrides class 추가

// ...

class MyHttpOverrides extends HttpOverrides{
  @override
  HttpClient createHttpClient(SecurityContext? context){  // '?'를 추가해서 null safety 확보
    return super.createHttpClient(context)
      ..badCertificateCallback = (X509Certificate cert, String host, int port)=> true;
  }
}
  • 참조의 stackoverflow에서는 빠져있지만, SecurityContext에 ? 를 추가해서 null safety를 확보합니다.
  • dart:io를 import 합니다.
import 'dart:io';

 

 

2. main.dart 내, main()함수에  MyHttpOverrides() 추가

위에서 만든 클래스를 추가해줍니다.

void main(){
  // ...

  // 아래의 코드 추가
  HttpOverrides.global = MyHttpOverrides();
  runApp(const ProviderScope(child: MyApp()));
}

 

 

 


 

반응형