NUOVA RISPOSTA:
Rivedendo il tuo link n. 4, sembra che tu abbia esaminato le utility esistenti e ricevuto la risposta che ciò che vuoi dovrebbe essere programmato. Fare ciò è relativamente banale. Il seguente script Perl farà ciò che vuoi:
#!/usr/bin/perl
# Code snippets taken from Net::SSLeay documentation and mildly modified.
# Requires a newer version of SSLeay (tested with 1.48)
# Needless to say, verify correct $host and $fingerprint before testing!!!
use Net::SSLeay qw(get_https3);
$host = "www.google.com";
$port = 443;
$fingerprint = "C1:95:6D:C8:A7:DF:B2:A5:A5:69:34:DA:09:77:8E:3A:11:02:33:58";
($p, $resp, $hdrs, $server_cert) = get_https3($host, $port, '/');
if (!defined($server_cert) || ($server_cert == 0)) {
warn "Subject Name: undefined, Issuer Name: undefined";
} elsif (Net::SSLeay::X509_get_fingerprint($server_cert, "sha1") ne $fingerprint) {
warn 'Invalid certificate fingerprint '
. Net::SSLeay::X509_get_fingerprint($server_cert, "sha1")
. ' for ' . Net::SSLeay::X509_NAME_oneline(
Net::SSLeay::X509_get_subject_name($server_cert));
} else {
print $p;
}
Come delineato nella documentazione di Net :: SSLeay, questo metodo indica la verifica dopo la transazione HTTP , quindi non dovrebbe essere usato se si desidera verificare che si stia parlando con il server giusto < em> prima invio dei dati. Ma se tutto quello che stai facendo è decidere se fidarti o meno di ciò che hai appena scaricato (che sembra essere il tuo riferimento n. 4), va bene.
VECCHIA RISPOSTA:
Puoi usare openssl come descritto qui :
A wit,
openssl s_client -connect <host>:<port> < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin
(La vecchia risposta era) Aggiornato
Come ha sottolineato @Gilles, questo non soddisfa il requisito di combinare la verifica del certificato con il recupero del contenuto effettivo.
Poiché openssl s_client combina le informazioni del certificato e la risposta del server nel flusso stdout, non può essere semplicemente usato per questo scopo. Probabilmente è possibile scrivere uno script che risucchierà l'output combinato e separerà i due in base ad alcuni semplici test di analisi, ma non è esattamente una soluzione chiavi in mano.