Desde abajo, el comando puede generar un pin Base64 solo para el certificado de primera profundidad. Pero es necesario generar un pin para toda la profundidad del 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
Da solo una clave en lugar de tres,
cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=
Entonces, ¿cómo podemos generar los tres niveles de pines?
Respuesta1
Aunque estoy mayoritariamente de acuerdo con Romeo en que ya deberías tener los archivos de certificado en el servidor, sihacerSi necesita procesar varios certificados desde uno, s_client
puede hacer 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
Respuesta2
Puede extraer el emisor del certificado (CN del emisor). Pero a partir de este punto deberás obtener este certificado manualmente, buscando en el sitio web del emisor. Si tiene acceso al servidor web, encontrará los certificados en el sistema de archivos y ejecutará su script sobre los archivos con certificados de CA.