Ошибка установления связи SSL на самозаверяющем сертификате в Flutter

Я пытаюсь подключить сервер с самозаверяющим сертификатом, но я принимаю ошибку:
E/flutter (3781): HandshakeException: ошибка установления связи с клиентом (ошибка ОС:
E/флаттер (3781): CERTIFICATE_VERIFY_FAILED: несоответствие имени хоста (ssl_cert.c: 345))
Код, где я устанавливаю сертификат:

String path = '/storage/sdcard0/server.crt';
SecurityContext context = new SecurityContext();
context.setTrustedCertificates(path, password: 'hello');
_client = new HttpClient(context: context);

Что я делаю неправильно?

Если я не устанавливаю SecurityContext, я получаю сообщение об установлении подлинности SSL.

Ответ 1

Я использовал HttpClient.badCertificateCallback
Воткод для принятия любого сертификата:

_client = new HttpClient();
_client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;

Ответ 2

Вы можете получить действительный сертификат SSL бесплатно с https://letsencrypt.org/

Ответ 3

В моем случае я получил это сообщение об ошибке, потому что я не указал имя хоста при запросе Common Name при создании самозаверяющего сертификата (localhost подходит для простых тестов):

$ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.pem

Country Name (2 letter code) [AU]:SI
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:

Ответ 4

Отключение антивируса решило мою проблему.