2017-05-05 4 views
0

OkHttp3docs (잘못된 값 입력 -> 예외 발생 -> 예상 값 입력)과 같이 안드로이드 (Retrofit 사용)에서 인증서를 고정했습니다.Android에서 인증서 고정

그러나 서버 인증서를 회전하기로 결정한 경우이 값을 고정하는 방법은 무엇입니까?

예 : 인증서 'X'가 있는데이 인증서는 인증서 'Y'로 2 개월 이내에 회전됩니다. 분명히 Google Play에서 내 앱을 업데이트하고 새로운 인증서를 사용하여 새 해시를 추가해야합니다. 그렇다면 현재이 해시를 예외에서만 가져올 수 있다면 어떻게 할 수 있습니까?

답변

0

몇 가지 옵션이있는 경우 먼저 잎 인증서에 고정 할 필요없이 대신 중간 또는 루트 인증서에 고정 할 수 있습니다. 이렇게하면 동일한 신뢰할 수있는 인증 기관을 계속 사용해야합니다. 변화없이 계속 일할 것입니다.

당연히 당신이 원하는 것이라고 가정하는 완벽한 인증서 회전을 위해 앱에 여러 개의 핀이 정의되어있는 것을 막을 수있는 방법은 없습니다.

#!/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을 살펴보고 디버그 도구를 실행하면 어떤 인증서가 고정되었는지 알 수 있습니다!

Android에서의 SSL 고정에 대한 자세한 내용은 다음 도움말을 작성하세요. Android Security: SSL Pinning