Visualizzazione dei dettagli del certificato SSL remoto utilizzando gli strumenti CLI

In Chrome, cliccando sull'icona di block verde HTTPS apre una window con i dettagli del certificato:

immettere qui la descrizione dell'immagine

Quando ho provato lo stesso con la curl, ho solo alcune delle informazioni:

$ curl -vvI https://gnupg.org * Rebuilt URL to: https://gnupg.org/ * Hostname was NOT found in DNS cache * Trying 217.69.76.60... * Connected to gnupg.org (217.69.76.60) port 443 (#0) * TLS 1.2 connection using TLS_DHE_RSA_WITH_AES_128_CBC_SHA * Server certificate: gnupg.org * Server certificate: Gandi Standard SSL CA * Server certificate: UTN-USERFirst-Hardware > HEAD / HTTP/1.1 > User-Agent: curl/7.37.1 > Host: gnupg.org > Accept: */* 

Qualsiasi idea di come get le informazioni complete del certificato formare uno strumento di row di command (cURL o altro)?

  • Utilizzo di un certificato SSL autofirmato per un repository interno APT basato su HTTPS
  • SSL multiplo su singolo IP con virtualmin
  • Outlook / errori di certificazione di Exchange dopo aver impostato client di cliencanvas, ecc ...
  • Come funziona questo tipo di SSL?
  • Dove viene il numero di logging SSL EV?
  • Dockerfile la separazione delle preoccupazioni per un http server sicuro Apache rispetto ai file di certificazione SSL
  • Creare una coppia di chiavi pubbliche private per il certificato in IIS
  • Nginx. Come rifiuto la richiesta di un server virtuale ssl non elencato?
  • 7 Solutions collect form web for “Visualizzazione dei dettagli del certificato SSL remoto utilizzando gli strumenti CLI”

    Dovresti essere in grado di utilizzare OpenSSL per il tuo scopo:

     echo | openssl s_client -showcerts -servername gnupg.org -connect gnupg.org:443 2>/dev/null | openssl x509 -inform pem -noout -text 

    Questo command si connette al sito web desiderato e si installa il certificato in formato PEM su un altro command openssl che legge e analizza i dettagli.

    (Si noti che è necessario -servername "redundant" il parametro del nome del -servername per fare openssl fare una richiesta con supporto SNI.)

    Questo è il mio scritto quotidiano:

     curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* SSL connection/ { cert=1 } /^\*/ { if (cert) print }' 

    Produzione:

     * SSL connection using TLS1.2 / ECDHE_RSA_AES_128_GCM_SHA256 * server certificate verification SKIPPED * server certificate status verification SKIPPED * common name: www.google.com (matched) * server certificate expiration date OK * server certificate activation date OK * certificate public key: RSA * certificate version: #3 * subject: C=US,ST=California,L=Mountain View,O=Google Inc,CN=www.google.com * start date: Wed, 24 May 2017 17:39:15 GMT * expire date: Wed, 16 Aug 2017 17:13:00 GMT * issuer: C=US,O=Google Inc,CN=Google Internet Authority G2 * compression: NULL * ALPN, server accepted to use http/1.1 * Connection #0 to host www.google.com left intact 

    Dipende da quale tipo di informazioni desideri, ma:

     openssl s_client -showcerts -connect gnupg.org:443 

    dovrebbe darti la maggior parte, anche se non è così leggibile come Chrome presenta.

    Per verificare i dettagli del certificato SSL, da sempre è disponibile il seguente strumento di row di command:

    https://github.com/azet/tls_tools

    È bello controllare di avere tutte le informazioni corrette per il rilascio di cert o la validation di quelli esistenti, nonché come poche dependencies e non richiede alcuna configuration.

    Questo è ciò che sembrano le prime righe dell'output:

     $ ./check_certificate_chain.py gnupg.org 443 >> Certificate Chain: [+]* OU=Domain Control Validated, OU=Gandi Standard SSL, CN=gnupg.org [+]** C=FR, O=GANDI SAS, CN=Gandi Standard SSL CA [+]*** C=US, ST=UT, L=Salt Lake City, O=The USERTRUST Network, OU=http://www.usertrust.com, CN=UTN-USERFirst-Hardware >> Certificate Information: ................................................................................ - [Subject]: OU=Domain Control Validated, OU=Gandi Standard SSL, CN=gnupg.org - [Issuer]: C=FR, O=GANDI SAS, CN=Gandi Standard SSL CA - [Valid from]: Mar 18 00:00:00 2014 GMT - [Valid until]: Mar 18 23:59:59 2016 GMT - [Authority]: Is not a CA - [Version]: 2 - [Serial No.]: 43845251655098616578492338727643475746 - [X.509 Extension Details]: -- [x509_authorityKeyIdentifier]: keyid:B6:A8:FF:A2:A8:2F:D0:A6:CD:4B:B1:68:F3:E7:50:10:31:A7:79:21 

    Quella output è seguita dall'intera catena del certificato allo stesso livello di dettaglio.

    Quello che mi piace che invece di essere uno strumento cli-centric cli come il cliente di openssl, questo cerca di fare il solo lavoro che ci occupa la maggior parte del tempo. Naturalmente openssl è più flessibile (cioè anche controllando i clientcert, imaps su porti dispari, ecc.) – ma non sempre ho bisogno di questo.

    In alternativa, se hai tempo per scavare in & setup o apprezzare altre funzionalità, c'è lo strumento più grande denominato sslyze (non utilizzarlo perché le dependencies e l'installazione …)

    Utilizzo uno script di shell per questo. È solo un wrapper attorno al command openssl che mi salva dalla memory della syntax.

    Fornisce opzioni per analizzare la maggior parte delle informazioni sul certificato che sono generalmente interessato o visualizzare l'output openssl raw.

    Può essere richiesto un file di certificato locale o un server remoto.

    Uso:

     $ ssl-cert-info --help Usage: ssl-cert-info [options] This shell script is a simple wrapper around the openssl binary. It uses s_client to get certificate information from remote hosts, or x509 for local certificate files. It can parse out some of the openssl output or just dump all of it as text. Options: --all-info Print all output, including boring things like Modulus and Exponent. --alt Print Subject Alternative Names. These will be typically be additional hostnames that the certificate is valid for. --cn Print commonName from Subject. This is typically the host for which the certificate was issued. --debug Print additional info that might be helpful when debugging this script. --end Print certificate expiration date. For additional functionality related to certificate expiration, take a look at this script: "http://prefetch.net/code/ssl-cert-check". --dates Print start and end dates of when the certificate is valid. --file Use a local certificate file for input. --help Print this help message. --host Fetch the certificate from this remote host. --issuer Print the certificate issuer. --most-info Print almost everything. Skip boring things like Modulus and Exponent. --option Pass any openssl option through to openssl to get its raw output. --port Use this port when conneting to remote host. If ommitted, port defaults to 443. --subject Print the certificate Subject -- typically address and org name. Examples: 1. Print a list of all hostnames that the certificate used by amazon.com is valid for. ssl-cert-info --host amazon.com --alt DNS:uedata.amazon.com DNS:amazon.com DNS:amzn.com DNS:www.amzn.com DNS:www.amazon.com 2. Print issuer of certificate used by smtp.gmail.com. Fetch certficate info over port 465. ssl-cert-info --host smtp.gmail.com --port 465 --issuer issuer= countryName = US organizationName = Google Inc commonName = Google Internet Authority G2 3. Print valid dates for the certificate, using a local file as the source of certificate data. Dates are formatted using the date command and display time in your local timezone instead of GMT. ssl-cert-info --file /path/to/file.crt --dates valid from: 2014-02-04 16:00:00 PST valid till: 2017-02-04 15:59:59 PST 4. Print certificate serial number. This script doesn't have a special option to parse out the serial number, so will use the generic --option flag to pass '-serial' through to openssl. ssl-cert-info --host gmail.com --option -serial serial=4BF004B4DDC9C2F8 

    È ansible get lo script qui: http://giantdorks.org/alain/shell-script-to-check-ssl-certificate-info-like-expiration-date-and-subject/

    Se si desidera eseguire questa operazione in Windows è ansible utilizzare PowerShell con la seguente funzionalità:

     function Retrieve-ServerCertFromSocket ($hostname, $port=443, $SNIHeader, [switch]$FailWithoutTrust) { if (!$SNIHeader) { $SNIHeader = $hostname } $cert = $null try { $tcpclient = new-object System.Net.Sockets.tcpclient $tcpclient.Connect($hostname,$port) #Authenticate with SSL if (!$FailWithoutTrust) { $sslstream = new-object System.Net.Security.SslStream -ArgumentList $tcpclient.GetStream(),$false, {$true} } else { $sslstream = new-object System.Net.Security.SslStream -ArgumentList $tcpclient.GetStream(),$false } $sslstream.AuthenticateAsClient($SNIHeader) $cert = [System.Security.Cryptography.X509Certificates.X509Certificate2]($sslstream.remotecertificate) } catch { throw "Failed to retrieve remote certificate from $hostname`:$port because $_" } finally { #cleanup if ($sslStream) {$sslstream.close()} if ($tcpclient) {$tcpclient.close()} } return $cert } 

    Questo ti permette di fare alcune cose ordinate

     #Save to file and open Retrieve-ServerCertFromSocket www.wrish.com 443 | Export-Certificate -FilePath C:\temp\test.cer ; start c:\temp\test.cer #Display the cert details Retrieve-ServerCertFromSocket www.wrish.com 443 | fl subject,*not*,Thumb*,ser* 
     nmap -sV -sC google.com -p 443 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.