Закрепление сертификата на 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