- How to Check SSL Certificates Details with Open SSL in Linux?
- Check the full details of the certificate
- Show the SSL certificate itself (encoded):
- Verify if the Keys Match
- Check who issued the SSL certificate
- Check whom the SSL certificate is issued to
- Check the validity of the SSL certificate
- Display the all above info about the SSL certificate
- Final Words
- Save 10% on SSL Certificates when ordering today!
- Как верифицировать сертификат SSL
- Связанные статьи:
How to Check SSL Certificates Details with Open SSL in Linux?
SSL certificates are now a requirement for any website. If you don’t encrypt your site, browsers will flag it as not secure, leaving visitors with an annoying warning message. But even if you add an SSL certificate, managing it is tricky. An SSL error may pop up unexpectedly, causing you all sorts of trouble.
To avoid SSL outages, you should monitor your SSL certificate frequently and always replace it on time. And, with certs expiring in one year, this task can become quite a chore. Thankfully, there are SSL tools to help you manage your certificates, and not a single program does a better job than the versatile OpenSSL utility.
With OpenSSL, you can apply for your digital certificate (Generate the Certificate Signing Request) and install the SSL files on your server. You can also convert your certificate into various SSL formats, as well as do all kinds of verifications. In this article, we’ll show you how to verify SSL certificate details using OpenSSL in Linux.
Most Linux systems will have OpenSSL pre-installed, but it’s better to ensure you have the latest running version. You can check your OpenSSL version by running the following command:
Certificate files in Linux are located by default in the /etc/pki/tls/certs folder or sometimes within an application-specific folder such as /etc/httpd for Apache. These generally use .pem or .crt extensions and will likely be named yourdomain.pem or yourdomain.crt, but sometimes the generic “server” file name is used as well. If you’ve applied for the SSL certificate and installed it on the server, you should already know its location and file names.
Check the full details of the certificate
OpenSSL provides a rich variety of commands to generate, install, and manage certificates. To check the details of a particular certificate, run the following command:
openssl x509 -in (path to certificate and certificate filename) -text -noout
Here’s what you should see:
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=DigiCert, Inc, CN=DigiCert SHA2
Not Before: Jun 31 23:32:14 2021 GMT
Not After : Jun 31 23:32:14 2022 GMT
Subject: C=US, ST=CA, L=Sacramento, O=Yourplc, OU=IT, CN=yourplc.com
Public Key Algorithm: rsaEncryption
Show the SSL certificate itself (encoded):
$ echo | openssl s_client -servername howtouselinux.com -connect yourplc.com:443 2>/dev/null | openssl x509
Verify if the Keys Match
To verify the public and private keys match, you need to extract the public key from each file and generate a hash output for it. All three files should share the same public key and the same hash value.
Use the following commands to generate a hash of each file’s public key:
openssl pkey -pubout -in privateKey.key | openssl sha256
openssl req -pubkey -in CSR.csr -noout | openssl sha256
openssl x509 -pubkey -in certificate.crt -noout | openssl sha256
Check who issued the SSL certificate
$ echo | openssl s_client -servername yourplc.com -connect yourplc.com:443 2>/dev/null | openssl x509 -noout -issuer
issuer= /C=US/DigiCert Inc/CN=DigiCert SHA2
Check whom the SSL certificate is issued to
$ echo | openssl s_client -servername .com -connect howtoyourplcuselinux.com:443 2>/dev/null | openssl x509 -noout -subject
Check the validity of the SSL certificate
$ echo | openssl s_client -servername howtouselinux.com -connect yourplc.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jun 31 23:32:14 2021 GMT
notAfter=Jun 31 23:32:14 2022 GMT
Display the all above info about the SSL certificate
$ echo | openssl s_client -servername howtouselinux.com -connect yourplc.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates
echo | openssl s_client -servername yourplc.com -connect yourplc.com:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates
issuer= /C=US/O=DigiCert Inc/CN=DigiCert SHA2
notBefore=Jun 31 23:32:14 2021 GMT
notAfter=Jun 31 23:32:14 2022 GMT
Final Words
If something goes wrong with your SSL connection, verifying your certificate’s details is the first step towards finding the culprit. In OpenSSL, you have a great utility to perform all kinds of checks, from inspecting the certificate issuer to analyzing technical data and seeing when the certificate expires. OpenSSL integrates with Linux and provides control over SSL installation via its flexible command lines.
Save 10% on SSL Certificates when ordering today!
Fast issuance, strong encryption, 99.99% browser trust, dedicated support, and 25-day money-back guarantee. Coupon code: SAVE10
Как верифицировать сертификат SSL
В разделе «Как создать сертификаты SSL (TLS) для сайтов» мы создали сертификат mydomain.com.crt, попробуем проверить его:
openssl verify mydomain.com.crt
C = US, ST = CA, O = "MyOrg, Inc.", CN = mydomain.com error 20 at 0 depth lookup: unable to get local issuer certificate error mydomain.com.crt: verification failed
Верификация провалилась — причина в том, что мы использовали для подписи сертификата приватный ключ от своего собственного CA, который создали чуть ранее.
С помощью опции -CAfile можно указать сертификат доверенного Центра Сертификации:
openssl verify -CAfile rootCA.crt mydomain.com.crt
Как можно увидеть, проверка подлинности прошла успешно:
Чтобы было поинтереснее, возьмём реальные сертификаты сайта и промежуточного центра сертификации:
openssl s_client -showcerts -connect w-e-b.site:443
Вы увидите сертификаты (один или несколько), найдите по полю CN сначала сертификат домена w-e-b.site:
И скопируйте содержимое начиная с -----BEGIN CERTIFICATE----- и заканчивая -----END CERTIFICATE-----. Затем сохраните это в файл w-e-b.site.crt.
Затем найдите сертификат центра сертификации и сохраните его в файл x3.crt:
Итак, для наших экспериментов у нас появилось два новых файла: w-e-b.site.crt (сертификат сайта) и x3.crt (сертификат промежуточного Центра Сертификации).
Попробуем проверить действительность сертификата сайта:
openssl verify w-e-b.site.crt
Поскольку сайт открывается нормально и веб браузер показывает, что с сертификатом сайта всё в порядке, то тот факт, что проверка подлинности не пройдена может показаться странным.
Проверим подлинность промежуточного сертификата организации, которая подписала сертификат сайта:
Как можно увидеть на скриншоте, с этим сертификатом всё в порядке.
Дело в том, что команда openssl verify сверяет подпись в сертификате с коревыми Центрами Сертификации, чьи сертификаты установлены в операционной системе как доверенные. Мы можем убедиться в этом. Следующая команда покажет организацию, подписавшую сертификат x3.crt:
openssl x509 -in x3.crt -noout -issuerissuer=O = Digital Signature Trust Co., CN = DST Root CA X3
Имя издателя в поле CN (Common Name) DST Root CA X3.
Убедимся, что сертификат этого CA действительно есть в системе:
awk -v cmd='openssl x509 -noout -subject' ' /BEGIN/;' < /etc/ssl/certs/ca-certificates.crt | grep 'DST Root CA X3'
Если мы посмотрим, кто выдал сертификат сайта w-e-b.site:
openssl x509 -in w-e-b.site.crt -noout -issuerТо увидим, что это Let's Encrypt Authority X3.
Посмотрим имя организации в сертификате x3.crt:
openssl x509 -in x3.crt -noout -subjectИмя совпало — это также Let's Encrypt Authority X3.
То есть в целом цепочка понятна — сертификат w-e-b.site.crt выдан организацией Let's Encrypt Authority X3, а её полномочия по выдаче сертификатов заверяет DST Root CA X3, которая в операционной системе находится среди доверенных корневых Центрах Сертификации.
Чтобы автоматически выполнить проверку всей цепочки с помощью openssl verify, нам нужно указать промежуточный сертификат после опции -untrusted. Если промежуточных сертификатов несколько, то нужно указать их все — опцию -untrusted можно использовать несколько раз.
openssl verify -untrusted x3.crt w-e-b.site.crt
Опция -show_chain покажет информацию о цепочке сертификатов, которая была построена:
openssl verify -untrusted x3.crt -show_chain w-e-b.site.crt
Опции -verify_hostname ИМЯ-ХОСТА и -verify_ip IP позволяют проверить, действительно ли сертификат выдан для указанного хоста или IP адреса. Чтобы проверка прошла успешно, имя хоста должно быть в Subject Alternative Name или Common Name в subject сертификата. А IP адрес должен быть в Subject Alternative Name в subject сертификата. Пример:
openssl verify -untrusted x3.crt -verify_hostname w-e-b.site w-e-b.site.crt
Следующими тремя командами вы можете проверить, соответствует ли SSL сертификат приватному ключу:
Для SSL сертификата выполните команду вида:
openssl x509 -noout -modulus -in ФАЙЛ.crt | openssl md5Для приватного ключа RSA выполните команду вида:
openssl rsa -noout -modulus -in ФАЙЛ.key | openssl md5openssl req -noout -modulus -in ФАЙЛ.csr | openssl md5Замените ФАЙЛ на имя ваших файлов. Для всего перечисленного выше — SSL сертификата, приватного ключа и запроса на подпись — хеш должен быть одинаковым.
Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».
Связанные статьи: