Linux ssl certificate verification

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.

Читайте также:  Linux регулярные выражения это

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.

Читайте также:  Значок переключение языка linux

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 -issuer
issuer=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 md5
openssl req -noout -modulus -in ФАЙЛ.csr | openssl md5

Замените ФАЙЛ на имя ваших файлов. Для всего перечисленного выше — SSL сертификата, приватного ключа и запроса на подпись — хеш должен быть одинаковым.

Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».

Связанные статьи:

Источник

Оцените статью
Adblock
detector