Как разрешить SSLPeerUnverifiedException: имя хоста не проверено в HttpsURLConnection в приложении NET.MAUI для Android?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как разрешить SSLPeerUnverifiedException: имя хоста не проверено в HttpsURLConnection в приложении NET.MAUI для Android?

Сообщение Anonymous »

Мое приложение NET.MAUI для Android выдает исключение SSLPeerUnverifiedException: имя хоста 192.168.100.2 не проверено при отправке запроса POST на PHP-скрипт, расположенный на локальном хосте IIS моего рабочего стола, как показано ниже.

Код: Выделить всё

await Task.Run(() =>
{
URL urlWebhook = new URL("https://192.168.100.2:443/medservices/ReceiveWebhooks.php");
HttpsURLConnection? connection = urlWebhook.OpenConnection() as HttpsURLConnection;
if(connection != null)
{
connection.DoInput = true;
connection.DoOutput = true;
connection.RequestMethod = "POST";
connection.ConnectTimeout = 10000;
connection.ReadTimeout = 10000;
connection.SetRequestProperty("Content-Type", "application/json");
connection.SetRequestProperty("Accept", "*/*");
connection.SetRequestProperty("User-Agent", "SmsGateway/1.0");
BufferedOutputStream os = new BufferedOutputStream(connection.OutputStream);
os.Write(Encoding.Default.GetBytes(strRequestBody));
os.Close();
isSent = connection.ResponseCode == HttpStatus.Ok;
connection.Disconnect();
}
});
Чтобы настроить привязку https и SSL в IIS, я использовал следующий сценарий PowerShell, который также экспортирует сертификат SSL в форматы pfx и pem.

Код: Выделить всё

$cert_params =
@{
Type = "Custom"
DnsName = "localhost", "192.168.100.2"
FriendlyName = "IIS Express SSL Server Authentication Certificate"
CertStoreLocation = "Cert:\LocalMachine\My"
NotAfter = (Get-Date).AddYears(10)
KeyAlgorithm = "RSA"
KeyLength = 2048
KeyUsageProperty = "All"
KeyUsage = "KeyEncipherment", "DataEncipherment", "DigitalSignature"
KeyExportPolicy = "Exportable"
HashAlgorithm = "SHA256"
TextExtension = @("2.5.29.37={text}1.3.6.1.5.5.7.3.1")
}
$cert = New-SelfSignedCertificate @cert_params
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store([System.Security.Cryptography.X509Certificates.StoreName]::Root, [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($cert)
$store.Close()
$export_params =
@{
Cert = $cert
FilePath = "C:\Users\pnfst\Documents\IISExpress\iis_ssl_server_certificate.pfx"
ChainOption = "EndEntityCertOnly"
Password = ConvertTo-SecureString -String "Kurort@75" -Force -AsPlainText
}
Export-PfxCertificate @export_params
$certBase64 = [System.Convert]::ToBase64String($cert.RawData, [System.Base64FormattingOptions]::InsertLineBreaks)
$pem = @"
-----BEGIN CERTIFICATE-----
$certBase64
-----END CERTIFICATE-----
"@
Out-File -FilePath "C:\Users\pnfst\Documents\IISExpress\iis_ssl_server_certificate.pem" -InputObject $pem -Encoding ascii
Import-Module WebAdministration
New-WebBinding -Name "Default Web Site" -IPAddress "192.168.100.2" -Port 443 -HostHeader "localhost" -Protocol "https" -SslFlags 1
$binding = Get-WebBinding -Name "Default Web Site" -Port 443 -Protocol "https"
$binding.AddSslCertificate($cert.Thumbprint, "My")
Set-WebConfiguration -Location "Default Web Site" -Filter "system.webServer/security/access" -Value "Ssl"
Restart-WebItem -PSPath "IIS:\Sites\Default Web Site"
Затем я использовал созданный pem для импорта сертификата в хранилище доверенных сертификатов пользователя Android. Я также добавил этот pem-файл в папку Platforms\Android\Resources\raw моего приложения, установил действие сборки AndroidResource и создал AndroidResource network_security_config.xml в папке Platforms\Android\Resources\xml со следующим содержимым.

Код: Выделить всё



localhost
192.168.100.2





И добавил ссылку на эту конфигурацию сетевой безопасности в свой AndroidManifest: Однако ни один из этих шагов не решил проблему.

Когда я подключаюсь к указанному ранее IP-адресу из веб-браузера Android, он каждый раз запрашивает сертификат и успешно подключается после его выбора.

Я также протестировал https-соединение с IP-адресом локального хоста IIS с помощью openssl, как рекомендовано. Он вернул «Проверьте код возврата: 0 (ок)». Это результат.

Изображение

Как мне решить эту проблему?

Подробнее здесь: https://stackoverflow.com/questions/797 ... tpsurlconn
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»