Ответ 1
Я использовал HttpClient.badCertificateCallback
Воткод для принятия любого сертификата:
_client = new HttpClient();
_client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
Я пытаюсь подключить сервер с самозаверяющим сертификатом, но я принимаю ошибку:
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.
Я использовал HttpClient.badCertificateCallback
Воткод для принятия любого сертификата:
_client = new HttpClient();
_client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
Вы можете получить действительный сертификат SSL бесплатно с https://letsencrypt.org/
В моем случае я получил это сообщение об ошибке, потому что я не указал имя хоста при запросе 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 []:
Отключение антивируса решило мою проблему.