Gerar impressões digitais HPKP para todas as cadeias de certificados

3

Abaixo do comando, é possível gerar o pino Base64 somente para o primeiro certificado de profundidade. Mas precisa 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?

    
por Sheel 24.05.2017 / 08:35

2 respostas

3

Embora eu concorde mais com Romeo que você deve ter os arquivos de certificados no servidor, se você fizer precisar processar os vários certs 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
    
por 25.05.2017 / 09:22
2

Você pode extrair o emissor do certificado (CN do emissor). Mas a partir deste ponto você deve obter este certificado manualmente, pesquisando no site do emissor. Se você tiver acesso ao servidor da web, encontrará no sistema de arquivos os certificados e executará seu script sobre os arquivos com certificados de CA

    
por 24.05.2017 / 08:53