Is there a way to programmatically check the Subject Alternative Names of a SAN SSL cert?
Using, for instance, the following command I can get many info but not all the SANs:
openssl s_client -connect www.website.com:443
Thank you very much!
Chrome has made it simple for any site visitor to get certificate information with just a few clicks: Click the padlock icon in the address bar for the website. Click on Certificate (Valid) in the pop-up. Check the Valid from dates to validate the SSL certificate is current.
The Subject Alternative Name (SAN) is an extension to the X. 509 specification that allows users to specify additional host names for a single SSL certificate. The use of the SAN extension is standard practice for SSL certificates, and it's on its way to replacing the use of the common name.
To get the Subject Alternative Names (SAN) for a certificate, use the following command:
openssl s_client -connect website.com:443 </dev/null 2>/dev/null | openssl x509 -noout -text | grep DNS:
First, this command connects to the site we want (website.com, port 443 for SSL):
openssl s_client -connect website.com:443
Then pipe (|
) that into this command:
openssl x509 -noout -text
This takes the certificate file and outputs all its juicy details. The -noout
flag keeps it from outputting the (base64-encoded) certificate file itself, which we don't need. The -text
flag tells it to output the certificate details in text form.
Normally there's a whole lot of output (signature, issuer, extensions, etc) that we don't care about, so then we pipe that into a simple grep:
grep DNS:
Since the SAN entries begin with DNS:
this simply returns only the lines that contain that, stripping out all the other info and leaving us with the desired information.
You may note that the command does not cleanly exit; openssl s_client
actually acts as a client and leaves the connection open, waiting for input. If you want it to immediately exit (e.g. to parse the output in a shell script) simply pipe echo
into it:
echo | openssl s_client -connect website.com:443 | openssl x509 -noout -text | grep DNS:
For this, you don't need the openssl s_client
command. Just add -in MyCertificate.crt
on the openssl x509
command and once again pipe through grep, e.g.:
openssl x509 -noout -text -in MyCertificate.crt | grep DNS:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With