Я разрабатываю приложение Nativescript, которое отлаживаю в эмуляторе Android.У меня есть служба в этом приложении, которая вызывает ASP.Net Core API, доступ к которому осуществляется через HTTPS.Я сгенерировал самозаверяющий сертификат и добавил его в свои личные и доверенные хранилища, используя следующий скрипт Powershell
$selfSignedCert = New-SelfSignedCertificate `
-Subject "CN=10.0.2.2" `
-KeyExportPolicy Exportable `
-FriendlyName "My self-signed certificate" `
-DnsName "localhost","10.0.2.2" `
-HashAlgorithm sha256 `
-KeyLength 2048 `
-NotAfter (Get-Date).AddYears(1) `
-CertStoreLocation "Cert:\CurrentUser\My" `
-TextExtension @("2.5.29.19 ={critical} {text}ca=true")
$thumbprint = $selfSignedCert.Thumbprint
Export-Certificate -Cert cert:\CurrentUser\my\$thumbprint -FilePath
c:\Temp\MyCert.cer -force
Import-Certificate -filePath c:\Temp\MyCert.cer -CertStoreLocation
"cert:\CurrentUser\Root"
. Затем я обновил application.json
API для обслуживания этого сертификата из своего магазина.т. е.
{
"Kestrel": {
"Endpoints": {
"HttpsInlineCertStore": {
"Url": "https://localhost:5001",
"Certificate": {
"Subject": "10.0.2.2",
"Store": "My",
"Location": "CurrentUser"
}
}
}
}
}
Я загрузил этот же сертификат в мой эмулятор Android и вижу его установленным в доверенных учетных данных здесь
![enter image description here](https://i.stack.imgur.com/tfxig.png)
и учетные данные пользователя здесь
![enter image description here](https://i.stack.imgur.com/k01Tg.png)
Я обновил AndroidManifest.xml
файл, включив в него network_security_config
, то есть
<application
android:name="com.tns.NativeScriptApplication"
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:debuggable="true"
android:networkSecurityConfig="@xml/network_security_config">
где network_security_config
равно
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="user"/>
</trust-anchors>
</debug-overrides>
</network-security-config>
Однако, когда я пытаюсь вызвать мой API из моего приложения Nativescript, я получаю следующую ошибку
JS: "originalStack": "Error: javax.net.ssl.SSLPeerUnverifiedException: Hostname 10.0.2.2 not verified:\n certificate: sha1/Ls/XF5mOCTPFkwc7SY//8DELFQU=\n DN: CN=10.0.2.2\n subjectAltNames: [localhost, 10.0.2.2]\n at new ZoneAwareError (file:///data/data/org.nativescript.koffi/files/app/vendor.js:80939:33)\n at onRequestComplete (file:///data/data/org.nativescript.koffi/files/app/vendor.js:100228:34)\n
at Object.onComplete (file:///data/data/org.nativescript.koffi/files/app/vendor.js:100220:13)",
JS: "zoneAwareStack": "Error: javax.net.ssl.SSLPeerUnverifiedException: Hostname 10.0.2.2 not verified:\n certificate: sha1/Ls/XF5mOCTPFkwc7SY//8DELFQU=\n DN: CN=10.0.2.2\n subjectAltNames: [localhost, 10.0.2.2...
Это потому, чтосертификат самозаверяющий, а не от доверенного центра сертификации, хотя моя конфигурация XML указывает на user
для его якорей доверия?Можно ли использовать самозаверяющие сертификаты при разработке приложений для Android?