Я пишу приложение для Android. Как использовать сертификат в соединении https
, когда я инициализирую сертификат из файла каталога, а не из пакетов?Использование сертификата в https
Когда у меня есть пакеты файл с паролем, этот код работает:
KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(certificateIs, pass.toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, pass.toCharArray()); SSLContext sc = SSLContext.getInstance("TLS"); sc.init(kmf.getKeyManagers(), trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
Но у меня есть сертификат, инициализированный из дер файла:
CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate certificate = (X509Certificate) cf.generateCertificate(certBytes);
Я не знаю, как использовать этот сертификат через https
связи.
Да, приложение для Android является клиентом, серверная сторона реализует другую компанию. У меня есть privateKey тоже (in der). У меня есть сертификат + закрытый ключ. Я не знаю, как использовать этот keypar в HttpsURLConnection. с pkcs, я использую
sc.init(kmf.getKeyManagers(), trustAllCerts, new java.security.SecureRandom());
иHttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
. Но когда у меня есть секретный ключ и сертификат отдельно. Вероятно, я должен вставить privateKey + cert в keyManagerFactory? Но я не знаю, как :( – PeterКак хранится ваш закрытый ключ? – Bruno
Закрытый ключ в формате pem и сертификат тоже в формате pem. Я преобразую его в der и я использую:
X509 Сертификат сертификата = (X509Certificate) cf.generateCertificate (byteCertDerFormat);
privSpec = новый PKCS8EncodedKeySpec (bytePKDerFormat);
KeyFactory KeyFactory = KeyFactory.getInstance ("RSA");
privKey = (RSAPrivateKey) keyFactory.generatePrivate (privSpec); – Peter