Из команды ниже можно сгенерировать Base64 pin только для сертификата первой глубины. Но нужно сгенерировать pin для всей глубины сертификата.
openssl s_client -servername example.com -connect example.com:443 -showcerts
| openssl x509 -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
Дает только один ключ вместо трех,
cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=
Итак, как нам сгенерировать все три уровня пинов?
решение1
Хотя я в целом согласен с Ромео, что у вас уже должны быть файлы сертификатов на сервере, если выделатьнеобходимо обработать несколько сертификатов из одного, s_client
вы можете сделать что-то вроде:
openssl s_client ..... -showcerts \
| awk '/-----BEGIN/{f="cert."(n++)} f{print>f} /-----END/{f=""}'
# or input from bundle or chain file
for c in cert.*; do
openssl x509 <$c -noout -pubkey .....
done
rm cert.*
# use better temp name/location if you want
решение2
Вы можете извлечь эмитента из сертификата (CN эмитента). Но с этого момента вы должны получить этот сертификат вручную, поискав на веб-сайте эмитента. Если у вас есть доступ к веб-серверу, вы найдете сертификаты в файловой системе и запустите свой скрипт над файлом(ами) с сертификатами CA