몇 가지 옵션이있는 경우 먼저 잎 인증서에 고정 할 필요없이 대신 중간 또는 루트 인증서에 고정 할 수 있습니다. 이렇게하면 동일한 신뢰할 수있는 인증 기관을 계속 사용해야합니다. 변화없이 계속 일할 것입니다.
당연히 당신이 원하는 것이라고 가정하는 완벽한 인증서 회전을 위해 앱에 여러 개의 핀이 정의되어있는 것을 막을 수있는 방법은 없습니다.
#!/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