Закрепление сертификата на Android

Я сделал закрепление сертификата на Android(используя Retrofit), как сказано в OkHttp3 документы ( указать неверное значение -> получил исключение -> указать ожидаемые значения).

Но как получить эти значения для закрепления, если я решу повернуть сертификат сервера.

Например: у меня есть сертификат "X", и этот сертификат будет повернут через два месяца с сертификатом "Y". Очевидно, я должен обновить свое приложение в Google Play и добавить новые хэши для закрепления с новым сертификатом. Так как я могу это сделать, если в настоящее время я могу получить эти хэши только из исключения.

1 ответ

При закреплении у вас есть несколько вариантов, во-первых, вам не нужно прикреплять к листовому сертификату, а вместо этого можно вместо этого прикрепить к промежуточному или корневому сертификату, таким образом, если вы продолжите использовать тот же доверенный центр сертификации, ваше приложение продолжит работать без изменений.

Конечно, ничто не помешает вам иметь несколько пинов, определенных в вашем приложении для плавной смены сертификатов, что, я полагаю, вам нужно

Вы можете использовать скрипт bash, такой как следующий, чтобы получить контакты:

#!/bin/bash
certs=`openssl s_client -servername $1 -host $1 -port 443 -showcerts </dev/null 2>/dev/null | sed -n '/Certificate chain/,/Server certificate/p'`

rest=$certs
while [[ "$rest" =~ '-----BEGIN CERTIFICATE-----' ]]
do
 cert="${rest%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
 rest=${rest#*-----END CERTIFICATE-----}

 echo `echo "$cert" | grep 's:' | sed 's/.*s:\(.*\)/\1/'`

 echo "$cert" | openssl x509 -pubkey -noout | 
     openssl rsa -pubin -outform der 2>/dev/null | 
     openssl dgst -sha256 -binary | openssl enc -base64
done

А потом беги с ./certs.sh www.appmattus.com хотя этот скрипт не распечатывает корневой сертификат.

В качестве альтернативы взгляните на https://github.com/scottyab/ssl-pin-generator, запустите инструмент в режиме отладки, чтобы вы знали, какие сертификаты вы прикрепляете!

Для получения более подробной информации о закреплении SSL на Android в целом я написал следующую статью: Безопасность Android: закрепление SSL

Другие вопросы по тегам