A partir do comando abaixo, é possível gerar o pino Base64 apenas para o primeiro certificado de profundidade. Mas é necessário gerar pin para toda a profundidade do certificado.
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
Dá apenas uma chave em vez de três,
cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=
Então, como podemos gerar todos os três níveis de pinos?
Responder1
Embora eu concorde principalmente com Romeo que você já deve ter os arquivos de certificado no servidor, se vocêfazerprecisa processar vários certificados de um, s_client
você pode fazer algo como:
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
Responder2
Você pode extrair o emissor do certificado (CN do emissor). Mas a partir deste ponto você deverá obter esse certificado manualmente, pesquisando no site do emissor. Se você tiver acesso ao servidor web você encontrará no sistema de arquivos os certificados e executará seu script sobre o(s) arquivo(s) com certificados CA