Веб-просмотр Android (api 21+) не может достичь локального IP-адреса, например: 172.18.17.16.5432
Перепробовал много решений, таких как
Доверие всем сертификатам с использованием HttpClient через HTTPS
в интернете но ответа нет.
У нас есть:
1. Собственный сертификат.
2. Локальный сервер как 171.18.13.12:3456
3. Включает с ПК, как Chrome, но говорит, что это небезопасно (перекрестный адрес https)
4. У нас также есть веб-браузер Android.
5. И мы должны пойти на сервер.
Но это не так.
webView.setBackgroundColor(Color.TRANSPARENT);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setDomStorageEnabled(true);
String newUA = "clientName";
webView.getSettings().setUserAgentString(newUA);
if (!webView.equals(webViewLocal))
webView.setWebViewClient(new WebClient(webViewLocal, this));
else {
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progressDialog(view, true);
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
progressDialog(view, false);
}
});
}
webView.setWebChromeClient(new ChromeClient());
webView.getSettings().setUseWideViewPort(false);
webView.getSettings().setLoadWithOverviewMode(false);
И доверие:
private void addToTrustStore(KeyStore trustStore) {
KeyManagerFactory kmfactory = null;
try {
kmfactory = KeyManagerFactory.getInstance(
KeyManagerFactory.getDefaultAlgorithm());
kmfactory.init(trustStore, pass_cert.toCharArray());
KeyManager[] keymanagers = kmfactory.getKeyManagers();
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(trustStore);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(keymanagers, tmf.getTrustManagers(), new SecureRandom());
SSLContext.setDefault(sslContext);
} catch (NoSuchAlgorithmException | UnrecoverableKeyException | KeyStoreException | KeyManagementException e) {
e.printStackTrace();
}
}
private void loadCertificateAndPrivateKey() {
try {
InputStream certificateFileStream = getClass().getResourceAsStream("/assets/" + cert_file);
KeyStore keyStore = KeyStore.getInstance("SomeName");
keyStore.load(certificateFileStream, pass_store != null ? pass_store.toCharArray() : null);
addToTrustStore(keyStore);
String alias = "someName";
Key key = keyStore.getKey(alias, pass_cert.toCharArray());
if (key instanceof PrivateKey) {
mPrivateKey = (PrivateKey) key;
Certificate cert = keyStore.getCertificate(alias);
mCertificates = new X509Certificate[1];
mCertificates[0] = (X509Certificate) cert;
}
certificateFileStream.close();
} catch (Exception e) {
Log.e(LOG_TAG, e.getMessage());
}
}
Приложение также выбрасывает
io.netty.handler.codec.DecoderException: javax.net.ssl.SSLException: Received fatal alert: certificate_unknown
Вопрос: это какой-то способ разрешить доступ к моему серверу без регистрации домена? Если да - пожалуйста, помогите.
Или что я делаю не так?