Шаг 1: Получите сертификат открытого ключа
Чтобы получить открытый ключ, вы можете попросить своего сотрудника по безопасности в вашей компании или вы можете легко перейти к конечной точке (api.sample.com или sample.com, где вы хотите сделать закрепление SSL) в браузере и нажмите на зеленый значок замка> сертификат.
Затем перетащитеи перетащите значок сертификата на рабочий стол.Готово.У вас есть общедоступный сертификат.
Шаг 2: Создайте файл BKS
Чтобы создать файл BKS, вам необходимо скачать надувную замочную банку.Надувной замок является крипто API.Вы можете скачать последнюю версию с здесь .
Теперь вы можете создать свой файл BKS, используя keytool и поставщика bouncy castle.
keytool -importcert -v -trustcacerts -file "[YOUR_PUBLIC_CERTIFICATE_PATH]" -alias [YOUR_ALIAS] -keystore "[BKS_TARGET_PATH]" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "[BOUNCY_CASTLE_JAR_PATH]" -storetype BKS -storepass [YOUR_PASSWORD]
Например: -
keytool -importcert -v -trustcacerts -file "/user/mert/testcertificate.cer" -alias mytestalias -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword
Эта команда создаст файл BKS с вашим общедоступным сертификатом.Если вы хотите добавить несколько сертификатов, запустите эту команду с другим открытым сертификатом.Эта команда проверит целевой путь и добавит новый сертификат в существующий файл BKS, чтобы в файле BKS были оба сертификата.
Давайте добавим несколько сертификатов в один файл BKS.
keytool -importcert -v -trustcacerts -file "/user/mert/testcertificate.cer" -alias mytestalias -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword
keytool -importcert -v -trustcacerts -file "/user/mert/testcertificate2.cer" -alias mytestalias2 -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword
Как видите, я запускаю ту же команду, и keytool добавит еще один сертификат в тот же файл BKS.Но учтите, что вы должны использовать другое имя псевдонима для сертификатов.
Давайте проверим, действительно ли файл BKS имеет 2 сертификата.Чтобы получить список сертификатов в вашем файле BKS, вам нужно выполнить следующую команду
keytool -list -keystore "/user/mert/desktop/certificate.bks" -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath "/user/mert/bcprov-jdk15on-159.jar" -storetype BKS -storepass mypassword
Она покажет вам публичные сертификаты в файле BKS.
Мы успешно создали файл BKS, который содержит 2 разных открытых ключа.
Итак, если у вас есть 2 разные конечные точки в вашем приложении и конечные точки не имеют один и тот же открытый ключ, вы можете использовать несколькосертификаты для закрепления SSL в вашем приложении.
Шаг 3. Применение закрепления SSL к клиенту OkHttp Я создал вспомогательный класс для закрепления SSL.Этот класс принимает 3 аргумента.
- Context
- Файл BKS
- Пароль BKS (который вводится в командной строке)
Вы можете найти код здесь
Вам необходимо найти файл BKS в папке res / raw /.
Почти готово.Все, что вам нужно, это прикрепить этот SSL-пиннер к вашему клиенту okhttp.
RawCertificatePinner pinner = new RawCertificatePinner(context, R.raw.mycertificate,
"mypassword");
OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder = rawCertificatePinner.pinCertificate(builder);
return new Retrofit.Builder()
.client(builder.build())
...
.build();