Search code examples
androidflutterssl-certificatehttp-postsslhandshakeexception

How to Solve this error CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:359))


I am new to flutter and developing an app but I am facing an issue regarding a post request to the asp.net core API method. This below is the flutter code that I am using to post data to the asp.net core API method.

Future registerUser(
    String userFullName, String username, String email, String password) async {
  var body = jsonEncode({
    "UserFullName": userFullName,
    "Username": username,
    "Email": email,
    "Password": password
  });
  final response = await http.post(
      Uri.parse(GetURI.baseURI() + 'Account/Register'),
      body: body,
      headers: {"content-type": "application/json"});
  print("Hello Body! " + response.statusCode.toString());
  print(response.body);
  return null;
}

On button click, I am calling the above function to post data but getting an error. The code for the button click is below:

onPressed: () async {
                  final validationSuccess = _formKey.currentState!.validate();
                  if (validationSuccess) {
                    _formKey.currentState!.save();
                    final formData = _formKey.currentState!.value;
                    final userData = await registerUser(
                        _formKey.currentState!.fields['username']!.value,
                        _formKey.currentState!.fields['email']!.value,
                        _formKey.currentState!.fields['email']!.value,
                        _formKey.currentState!.fields['password']!.value);
                    print(userData!.userFullName);
                    ScaffoldMessenger.of(context).showSnackBar(SnackBar(
                      content: Text('$formData'),
                      duration: Duration(seconds: 5),
                    ));
                  }
                }

On clicking the button it gives me the error like below:

[ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: HandshakeException: Handshake error in client (OS Error:
CERTIFICATE_VERIFY_FAILED: unable to get local issuer certificate(handshake.cc:359))

This is the Class code from where I am returning my URL:

class GetURI {
  static String baseURI() {
    return 'https://10.103.78.29:44318/api/';
  }
}

My main.dart file

import 'dart:io';

import 'package:bugsmashmobileapp/Screen/LoginScreen/login_body.dart';
import 'package:bugsmashmobileapp/Screen/SignupScreen/signup_body.dart';
import 'package:bugsmashmobileapp/Screen/WelcomeScreen/getting_started_screen.dart';
import 'package:flutter/material.dart';

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
  }
}

void main() {
  HttpOverrides.global = new MyHttpOverrides();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'BUGSMASH APP',
      theme: ThemeData(
          primarySwatch: Colors.blue, scaffoldBackgroundColor: Colors.white),
      home: GettingStartedScreen(),
      routes: {
        SignupScreen.routeName: (context) => SignupScreen(),
        LoginScreen.routeName: (context) => LoginScreen()
      },
    );
  }
}

I have tried many ways and searched a lot but not able to get a good way to solve this error. If anyone can help it would be appreciated.


Solution

  • When I tried ngrok the problem is solved for me. First I created an account on ngrok (Click here to go to website) and then you need to install its software to generate a URL and forwarding it to your API Project. Then you can use that URL in your Flutter Project without any issue.