OpenSSL ottiene la lunghezza della chiave di tutti i certificati [chiuso]

0

Sto cercando di garantire che tutti i certificati in una catena per un host abbiano una lunghezza della chiave di 2048 bit. Usando openssl s_client, viene fornita solo la lunghezza della chiave per il cert di quell'host, esiste un modo semplice per elencare la lunghezza della chiave per tutti dalla riga di comando, o è necessario scaricare tutti i certificati e controllare manualmente?

    
posta Slicedpan 29.11.2013 - 11:34
fonte

1 risposta

0

Se disponi di un server accessibile al pubblico, utilizza link . Altrimenti, vedi sotto per uno script.

Non sono a conoscenza di un'opzione s_client che elenca le dimensioni della chiave per tutti i certificati in una catena. Potresti utilizzare l'opzione -showcerts per ottenere tutti i certificati forniti dal server e controllare ciascuno dei certificati forniti e presumere che i certificati nel tuo trust store non utilizzino chiavi di piccole dimensioni.

Si noti che alcuni server potrebbero essere configurati in modo errato per fornire certificati nella catena non utilizzati (e non corretti). Ricordo di aver visto un sito che si collegava bene in Firefox, ma falliva in Java. Si è scoperto che una vecchia CA scaduta è stata inclusa nella catena insieme agli altri certificati. In questo caso, Firefox ignorerebbe quel certificato poiché ha trovato una catena di certificati valida. openssl s_client -showcerts stampa tutti i certificati, anche quelli non utilizzati (l'ho appena verificato aggiungendo alla catena un certificato falso da 1024 bit).

Il seguente script analizza openssl s_client -showcerts output:

#!/usr/bin/awk -f
# Match all certificates
/^-----BEGIN CERTIFICATE-----$/ { in_cert=1; }
in_cert { cert = cert $0 "\n"; }
/^-----END CERTIFICATE-----$/ { in_cert = 0; }
!in_cert && cert {
    infocmd="openssl x509 -text -noout | grep -E 'Public-Key:|Subject:'";
    print cert | infocmd;
    close(infocmd);
    cert="";
}
# Print the verification result
/Verify return code/

Quindi usa bits.awk sopra con:

echo | openssl s_client -CApath /etc/ssl/certs \
    -connect example.com:443 -showcerts 2>/dev/null | ./bits.awk

L'output è simile a:

        Subject: CN=example.com
                Public-Key: (2048 bit)
        Subject: O=Trusted Certs Ltd., CN=Trusted CA
                Public-Key: (2048 bit)
        Subject: CN=Insecure
                Public-Key: (1024 bit)
    Verify return code: 0 (ok)

Le prime due righe sono effettivamente utilizzate per la verifica della catena, l'ultima non lo è, ma lo script non lo sa.

    
risposta data 29.11.2013 - 19:28
fonte

Leggi altre domande sui tag