いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Flutterメモ-14 (httpsリクエスト時のCERTIFICATE_VERIFY_FAILEDをバイパスさせる)(開発時)

概要

f:id:gsf_zero1:20210829014931p:plain

忘れちゃいそうなのでここにメモメモ。

HTTPSアクセスが必要な処理があって、開発時なのでサーバ側にオレオレ証明書を置いて動かしているとします。

その状態で https アクセスをすると

        final response = await http.post(
          Uri.https(
            'dokokano.server.dev',
            '/path/to/api',
          ),
          body: json.encode(request),
          headers: {'Content-Type': 'application/json'},
        );

CERTIFICATE_VERIFY_FAILED というエラーが返ってきます。自己証明書だからですね。

とかいって、正規の証明書を仕込むのはちょっと面倒なので、開発時はこのCERTチェックをバイパスしてほしい。

そういう場合は、以下のようにするといいかもしれません。

まず、HttpOverrides を継承したクラスを用意します。こんな感じ。

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

このクラスのインスタンスをリクエスト出す前に HttpOverrides.global に設定します。

        HttpOverrides.global = PermitInvalidCertification();

        final response = await http.post(
          Uri.https(
            'dokokano.server.dev',
            '/path/to/api',
          ),
          body: json.encode(request),
          headers: {'Content-Type': 'application/json'},
        );

これでエラーが出ずにリクエストが飛ばせます。後は開発時のみ有効になるように調整してやればいいですね。

参考情報

stackoverflow.com


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com