====== Alcuni suggerimenti per il troubleshooting con OpenSSL e certutil ====== ===== Verificare che la chiave pubblica, privata e la certificate sign request corrispondano ===== Bisogna verificare in effetti che le chiavi abbiano lo stesso modulo. Per praticità di comparazione, ne calcoleremo il valore MD5: Procedura per chiavi a crittografia ellittica: $ openssl x509 -noout -in server.pem -pubkey | openssl md5 $ openssl pkey -in server.key -pubout | openssl md5 $ openssl req -noout -in server.csr -pubkey | openssl md5 Procedura per chiavi RSA: $ openssl x509 -noout -modulus -in server.pem | openssl md5 $ openssl rsa -noout -modulus -in server.key | openssl md5 $ openssl req -noout -modulus -in server.csr | openssl md5 ===== Verificare la correttezza della CA-Chain ===== $ openssl verify -show_chain -CAfile RootCACert.pem -CAfile IntermediateCACert.pem ServerCert.pem Se la catena non è completa viene visualizzato un errore del tipo: "error 20 at 0 depth lookup:unable to get local issuer certificate" Su Windows command line o PowerShell, allo stesso scopo, è possibile usare il comando certutil -verify servercert.pem cachain.pem oppure se avete installato OpenSSL openssl verify -CAstore org.openssl.winstore:// -show_chain -CAfile RootCACert.pem -CAfile IntermediateCACert.pem ServerCert.pem, che mostra invece i vari step dal leaf certificate fino alla root. ===== Come visualizzare, scaricare e verificare il certificato server SSL/TLS e la connessione ===== $ openssl s_client -connect host:port Tabella di protocolli well-known che usano SSL: Protocol Port https 443/tcp nntps 563/tcp ldaps 636/tcp ftps-data 989/tcp telnets 992/tcp imaps 993/tcp ircs 994/tcp pop3s 995/tcp ssmtp 465/tcp Per verificare i parametri di connessione è necessario specificare almeno un certificato CA, al massimo una chiave segreta client e un certificato pubblico. $ openssl s_client -CAfile /etc/ssl/certs/root_ca.pem -connect host:443 $ openssl s_client -CAfile /etc/ssl/certs/root_ca.pem -cert /my/cert.pub -key /my/key.priv -connect host:443 Una connessione riuscita restituisce alla fine: Verify return code: 0 (ok) ===== Verificare date di validità e altri parametri di un certificato usato da un server non web ===== Alcuni esempi possono essere server ldap, imap, pop, ecc.... openssl s_client -connect : | openssl x509 -in - -text dove può essere anche espresso in notazione well known: ldaps, pops, imaps, ecc... ---- Credits: Daniele Albrizio, Alberto Bianco per alcune info su Windows