клиентский сертификат
, который доверяет сервер, и клиентский приватный ключ
;серверный сертификат
, которым доверяет клиент.
По умолчанию тип KeyStore в Java — JKS, а в Android — BKS.
Примеры генерации keyStore и trustStore// Экспортирование сертификата клиента и приватного ключа с помощью OpenSSL в формат P12
String p12File = "client.p12";
// Вам потребуется знать пароль P12
String p12Pwd = "123456";
// Создание KeyStore, используя пароль P12
KeyStore keyStore1 = KeyStoreManager.getKeyStoreByP12(ctx, p12File, p12Pwd);
// Генерация TrustStore с использованием сертификата сервера с помощью keytool
String bksFile = "client.bks";
// Вам потребуется знать пароль BKS
String bksPwd = "123456";
// Создание TrustStore
KeyStore trustStore1 = KeyStoreManager.getTrustStoreByBks(ctx, bksFile, bksPwd);
// Создание файла вашего приватного ключа, содержимое которого начинается с BEGIN RSA PRIVATE KEY
String clientPem = "client.pem";
// Генерация сертификата клиента на основе вашего приватного ключа
String clientCrt = "client.crt";
// Установка пароля для KeyStore
```java
String keyStorePwd = "123456";
// Создание KeyStore
KeyStore keyStore2 = KeyStoreManager.getKeyStoreByCrtPem(ctx, clientCrt, clientPem, keyStorePwd);
// Сертификат сервера
String serverCrt = "server.crt";
// Создание TrustStore
KeyStore trustStore2 = KeyStoreManager.getTrustStoreByCrt(ctx, serverCrt);
// -------------Использование HTTPS-класса---------------
// Метод инициализации вызывается один раз, если вы доверяете всем серверам, передайте null вместо trustStore!
HTTPS.init(keyStore, keyStorePwd, trustStore);
// Выполнение запроса
new HTTPS().doGET(HTTPS_URL, params);
// ----------Использование класса HttpClientTool----------
```## Инициализация метода требуется всего один раз; если вы доверяете всем серверам, передайте null в качестве параметра trustStore!
```java
HttpClientTool.init(keyStore, keyStorePwd, trustStore);
HttpClientTool.doGET(HTTPS_URL, params);
```#### Важное замечание
---
По поводу преобразования приватного ключа потребовалось несколько дней.
На сайте есть множество материалов, объясняющих использование P12 и BKS методов для создания keyStore и trustStore в Android.
В проекте я пытался прочитать `client.pem`, чтобы преобразовать его в приватный ключ PKCS8 типа, аналогичный P12.
Известно, что приватный ключ, созданный с помощью OpenSSL, имеет следующий вид, как, например, `client.pem` в проекте:
```plaintext
-----BEGIN RSA PRIVATE KEY-----
Преобразование PKCS8 с помощью OpenSSL довольно просто:
openssl pkcs8 -topk8 -inform PEM -in client.pem -outform PEM -nocrypt -out client_pkcs8.pem
После преобразования содержимое будет иметь вид:
-----BEGIN PRIVATE KEY-----
Код для выполнения вышеупомянутого преобразования действительно прост. Используйте класс PemReader
из библиотеки bcprov-jdk1***.jar, чтобы прочитать pem в виде KeyPair
. Затем извлеките приватный ключ из KeyPair
, это и будет нашим приватным ключом!
InputStream pem = ctx.getResources().getAssets().open(pemFile);
InputStreamReader inReader = new InputStreamReader(pem);
PEMReader pemReader = new PEMReader(inReader);
KeyPair keyPair = (KeyPair) pemReader.readObject();
PrivateKey privateKey = keyPair.getPrivate();
С использованием PemWriter
можно распечатать ключ, включая строки BEGIN и END:
PemObject obj = new PemObject(keyName, keyBytes);
PrintWriter pw = new PrintWriter(System.out);
PemWriter pemw = new PemWriter(pw);
pemw.writeObject(obj);
pw.close();
pemw.close();
Хотите узнать больше о сертификатах? Посетите мой другой проект KS https://git.oschina.net/liuzy1988/KS
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )