Я работаю над встроенным телевизионным проектом Android. Я использую Nanohttpd в качестве веб -сервера. Сервер проводит простую веб -страницу, к которой можно получить доступ из браузера, введя IP -адрес телевизора. /> [*] появляется подсказка для входа в систему (Basic /Digest Auth). < /li>
После входа в правильные учетные данные страница успешно отображается. https: //192.168.1.x: 8443.
[*] Подсказка для входа в систему все еще появляется.
После входа в правильные учетные данные страница остается пустой - она не загружается, и не отображается контент. />
Additional Info:
Target device: Android 9-based embedded TV
Browser: Chrome/Edge (tested from a PC in the same network)
SSL: Self-signed certificate
Authentication: Basic and Digest (tested both)
Нет ошибок в журналах adb logcat или nanohttpd < /p>
Вот то, что я уже сделал: < /p>
Я создал самоорегированный сертификат, используя SSL. Без ошибок и прослушивания в порту HTTPS. Проблема в том, что после аутентификации. < /li>
< /ul>
Что я хотел бы спросить: < /p>
Не могли бы вы взглянуть на приведенные ниже фрагменты кода и сообщить мне, если есть какие -либо ошибки или отсутствующие конфигурации в HTTPS на установке HTTPS? Nanohttpd по сравнению с http? public HTTPServer(Context context, String serverPath) {
super(SERVER_HOSTNAME, SERVER_PORT);
this.context = context;
this.serverPath = serverPath;
readCredentials();
try {
String ipAddress = getDeviceIpAddress();
char[] ksPassword = "password".toCharArray();
String keystoreFilePath = "/odm/etc/tvconfig/crestron/keystore.p12";
File keystoreDir = new File("/odm/etc/tvconfig/crestron/");
if (!keystoreDir.exists()) {
boolean created = keystoreDir.mkdirs();
if (created) {
Log.d(TAG, "Keystore created: " + keystoreDir.getAbsolutePath());
} else {
Log.e(TAG, "Keystore couldn't be created: " + keystoreDir.getAbsolutePath());
}
}
File keystoreFile = new File(keystoreFilePath);
KeyStore loadedKeyStore;
if (!keystoreFile.exists() || keystoreFile.length() == 0) {
Log.d(TAG, "Keystore is non-existing or blank, creating a new one...");
loadedKeyStore = createDynamicKeyStore(ipAddress, String.valueOf(ksPassword), keystoreFilePath);
Log.d(TAG, "Keystore saved at '" + keystoreFilePath);
}
loadedKeyStore = KeyStore.getInstance("PKCS12");
try (FileInputStream fis = new FileInputStream(keystoreFile)) {
loadedKeyStore.load(fis, ksPassword);
Log.d(TAG, "Keystore successfully loaded from '" + keystoreFilePath);
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(loadedKeyStore, ksPassword);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), null, null);
makeSecure(sslContext.getServerSocketFactory(), null);
Log.d(TAG, "HTTPS is secured");
} catch (Exception e) {
Log.e(TAG, "HTTPServer error: " + e.getMessage(), e);
}
generateNonce();
}
// generating a generic certificate file:
public KeyStore createDynamicKeyStore(String ip, String password, String filePath) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
long now = System.currentTimeMillis();
Date startDate = new Date(now - 3600000L);
Date endDate = new Date(now + 365L * 24 * 3600 * 1000);
X500Name issuer = new X500Name("CN=" + ip);
X500Name subject = issuer;
BigInteger serial = BigInteger.valueOf(now);
GeneralName ipName = new GeneralName(GeneralName.iPAddress, ip);
GeneralNames subjectAltName = new GeneralNames(ipName);
ContentSigner signer = new JcaContentSignerBuilder("SHA256withRSA").build(keyPair.getPrivate());
X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(
issuer, serial, startDate, endDate, subject, keyPair.getPublic());
certBuilder.addExtension(Extension.subjectAlternativeName, false, subjectAltName);
X509Certificate certificate = new JcaX509CertificateConverter().getCertificate(certBuilder.build(signer));
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(null, null);
keyStore.setKeyEntry("dynamickey", keyPair.getPrivate(), password.toCharArray(), new java.security.cert.Certificate[]{certificate});
try (FileOutputStream fos = new FileOutputStream(filePath)) {
keyStore.store(fos, password.toCharArray());
Log.d(TAG, "KeyStore successfully saved at '" + filePath);
}
return keyStore;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ank-page-a
Nanohttpd Server на встроенном Android TV: HTTP работает, но HTTPS показывает пустую страницу после аутентификации ⇐ Android
Форум для тех, кто программирует под Android
1753392260
Anonymous
Я работаю над встроенным телевизионным проектом Android. Я использую Nanohttpd в качестве веб -сервера. Сервер проводит простую веб -страницу, к которой можно получить доступ из браузера, введя IP -адрес телевизора. /> [*] появляется подсказка для входа в систему (Basic /Digest Auth). < /li>
После входа в правильные учетные данные страница успешно отображается. https: //192.168.1.x: 8443.
[*] Подсказка для входа в систему все еще появляется.
После входа в правильные учетные данные страница остается пустой - она не загружается, и не отображается контент. />
Additional Info:
Target device: Android 9-based embedded TV
Browser: Chrome/Edge (tested from a PC in the same network)
SSL: Self-signed certificate
Authentication: Basic and Digest (tested both)
Нет ошибок в журналах adb logcat или nanohttpd < /p>
Вот то, что я уже сделал: < /p>
Я создал самоорегированный сертификат, используя SSL. Без ошибок и прослушивания в порту HTTPS. Проблема в том, что после аутентификации. < /li>
< /ul>
Что я хотел бы спросить: < /p>
Не могли бы вы взглянуть на приведенные ниже фрагменты кода и сообщить мне, если есть какие -либо ошибки или отсутствующие конфигурации в HTTPS на установке HTTPS? Nanohttpd по сравнению с http? public HTTPServer(Context context, String serverPath) {
super(SERVER_HOSTNAME, SERVER_PORT);
this.context = context;
this.serverPath = serverPath;
readCredentials();
try {
String ipAddress = getDeviceIpAddress();
char[] ksPassword = "password".toCharArray();
String keystoreFilePath = "/odm/etc/tvconfig/crestron/keystore.p12";
File keystoreDir = new File("/odm/etc/tvconfig/crestron/");
if (!keystoreDir.exists()) {
boolean created = keystoreDir.mkdirs();
if (created) {
Log.d(TAG, "Keystore created: " + keystoreDir.getAbsolutePath());
} else {
Log.e(TAG, "Keystore couldn't be created: " + keystoreDir.getAbsolutePath());
}
}
File keystoreFile = new File(keystoreFilePath);
KeyStore loadedKeyStore;
if (!keystoreFile.exists() || keystoreFile.length() == 0) {
Log.d(TAG, "Keystore is non-existing or blank, creating a new one...");
loadedKeyStore = createDynamicKeyStore(ipAddress, String.valueOf(ksPassword), keystoreFilePath);
Log.d(TAG, "Keystore saved at '" + keystoreFilePath);
}
loadedKeyStore = KeyStore.getInstance("PKCS12");
try (FileInputStream fis = new FileInputStream(keystoreFile)) {
loadedKeyStore.load(fis, ksPassword);
Log.d(TAG, "Keystore successfully loaded from '" + keystoreFilePath);
}
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(loadedKeyStore, ksPassword);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(kmf.getKeyManagers(), null, null);
makeSecure(sslContext.getServerSocketFactory(), null);
Log.d(TAG, "HTTPS is secured");
} catch (Exception e) {
Log.e(TAG, "HTTPServer error: " + e.getMessage(), e);
}
generateNonce();
}
// generating a generic certificate file:
public KeyStore createDynamicKeyStore(String ip, String password, String filePath) throws Exception {
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
long now = System.currentTimeMillis();
Date startDate = new Date(now - 3600000L);
Date endDate = new Date(now + 365L * 24 * 3600 * 1000);
X500Name issuer = new X500Name("CN=" + ip);
X500Name subject = issuer;
BigInteger serial = BigInteger.valueOf(now);
GeneralName ipName = new GeneralName(GeneralName.iPAddress, ip);
GeneralNames subjectAltName = new GeneralNames(ipName);
ContentSigner signer = new JcaContentSignerBuilder("SHA256withRSA").build(keyPair.getPrivate());
X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(
issuer, serial, startDate, endDate, subject, keyPair.getPublic());
certBuilder.addExtension(Extension.subjectAlternativeName, false, subjectAltName);
X509Certificate certificate = new JcaX509CertificateConverter().getCertificate(certBuilder.build(signer));
KeyStore keyStore = KeyStore.getInstance("PKCS12");
keyStore.load(null, null);
keyStore.setKeyEntry("dynamickey", keyPair.getPrivate(), password.toCharArray(), new java.security.cert.Certificate[]{certificate});
try (FileOutputStream fos = new FileOutputStream(filePath)) {
keyStore.store(fos, password.toCharArray());
Log.d(TAG, "KeyStore successfully saved at '" + filePath);
}
return keyStore;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79713985/nanohttpd-server-on-embedded-android-tv-http-works-but-https-shows-blank-page-a[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия