- 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!
- showcert: проверяем сертификаты (без боли)
- Просмотр сертификатов через showcert
- Формат вывода сертификатов
- Сахар для LetsEncrypt
- Заключение
- Проверка SSL на валидность при помощи openssl
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
showcert: проверяем сертификаты (без боли)
showcert — маленькая CLI утилитка, альтернатива openssl для просмотра сертификатов. Она умеет 1% того, что может openssl, но зато умеет [почти] все, что нужно в обычной админской жизни и даже немного больше чем openssl. И гораздо проще в использовании. Основные функции:
- Взять сертификат (или цепочку) из stdin, файла(файлов) или из TLS сервиса (HTTPS, POP3S, IMAPS), в том числе через STARTTLS (для SMTP, POP3, IMAP)
- Проверить валидность сертификата.
- Проверить «свежесть» сертификата, и если срок действия истекает через N дней — передать это в коде завершения.
- Распечатать сертификат (цепочку) в краткой форме (только основное), полной, в PEM формате (для сохранения в cert.pem или fullchain.pem).
И все это делается простым, интуитивно-понятным образом, для людей.
Когда я хочу проверить дату истечения, например, почтового сертификата яндекса, немного гуглю, потом сноровисто пишу что-то вроде:
$ echo | openssl s_client -connect mx.yandex.ru:25 -starttls smtp 2>&1 | openssl x509 -noout -dates
Когда я печатаю эту строчку, вспоминаю немало многокоренных слов из флотской службы, а ведь я даже не служил. А теперь, представьте, что мы хотим не просто увидеть дату, а еще и как-то что-то сделать, если до истечения останется меньше 20 дней. как будет выглядеть команда? Мне вообще сложно представить, как это можно автоматизировать через openssl и простые шелл скрипты.
Просмотр сертификатов через showcert
А теперь (после установки: pip3 install showcert ) сравните с:
$ showcert mx.yandex.ru:25
Names: mx.yandex.ru mx.yandex.net
notBefore: 2022-07-25 11:16:45 (15 days old)
notAfter: 2023-01-22 20:59:59 (165 days left)
Issuer: C=BE O=GlobalSign nv-sa CN=GlobalSign RSA OV SSL CA 2018
Ну разве не проще? showcert сам (по номеру порта) догадывается, как начать STARTTLS (но конечно же, это можно переопределить через опцию -t / —starttls, например, -t no или -t imap).
Предупредить о том, что сертификат скоро протухнет? Окей!
$ showcert mx.yandex.ru:25 -qw 200 || echo PROBLEM
mx.yandex.ru:25 expires in 165 days
PROBLEM
-q — тихий режим, не печатать лишнего, только предупреждения, -w 200 — завершаться с кодом ошибки, если до протухания меньше 200 дней.
Проверить https вебсайт? showcert github.com (Несложный синтаксис?)
«Скопировать» fullchain.pem с сервера (взять его и распечатать в PEM):
$ showcert google.com —chain -o pem > fullchain.pem
У меня после этого дампа (не с гугла, а со своего другого сервера) — даже md5 файлов сошелся!
Так же можно посмотреть или проверить один или несколько локальных файлов сертификатов (fullchain.pem или cert.pem).
Можно добавить —chain чтобы увидеть всю цепочку. И ключ -w тоже работает.
Формат вывода сертификатов
По умолчанию ( -o brief ) выводится краткая информация (все, что обычно важно, минимум лишнего). -o full дает полный дамп (как openssl), -o pem даст сертификат в PEM формате (удобно сделать редирект в файл и получить его на диске).
Еще есть удобный формат -o names — просто распечатывает все имена из сертификата, и его вариация -o dnames , о ней ниже.
Сахар для LetsEncrypt
Мы много используем LetsEncrypt, поэтому showcert удобен для этого. На сервере могут быть десятки (а то и сотни) сайтов, у каждого сертификат. Да, certbot renew в теории должен обновлять их, но сайты живые, постоянно разрабатываются, причем разными людьми и с ними иногда происходят разные чудеса. То поменяется DocumentRoot, то появятся правила rewrite/redirect, которые блокируют проверку, то доменное имя куда-то уедет. В общем, обновления иногда фейлятся и сертификаты протухают. А когда сайтов много, что-то проблемное случается регулярно.
Мы используем okerr (статья про okerr на хабре) для мониторинга. Наш собственный open source гибридный мониторинг. Раньше мы использовали скрипт, создавал индикатор типа sslcert для каждого сайта (это тоже не очень удобно, так как сайты ведь иногда и умирают или переезжают на другой сервер). Но с showcert стало еще проще:
Простой приятный способ проверить, что все LetsEncrypt сертификаты еще свежи:
# showcert :le -qw
/etc/letsencrypt/live/example.com/fullchain.pem expires in 19 days
/etc/letsencrypt/live/example.net/fullchain.pem expires in 19 days
# echo $?
2
Команда выше — синоним showcert /etc/letsencrypt/live/*/fullchain.pem -qw , а код :le запомнить проще, чем путь к сертификатам. Ну и код завершения удобен, чтобы использовать его в мониторинге, собственных скриптах. У нас showcert вызывается из okerrupdate/okerrmod, в окерр внешние скрипты проверки цепляются одной строчкой, но если у вас другой мониторинг — тоже сможете легко подцепить showcert.
Если не используете никакой мониторинг, то showcert :le -qw в cron раз в сутки — оповестит заранее о сертификатах, которые своевременно не смогли обновиться, и у вас будет время починить.
Еще одна опция: -o dnames печатает имена через -d, это удобно чтобы скармливать их certbot:
$ showcert -o dnames habr.ru
-d habr.ru -d www.habr.ru
Для двух имен, как у хабра — это не имеет особого смысла, но если у сертификата имен много, и вам нужно пересоздать его — вручную печатать их можно и ошибиться. Проще через showcert получить часть команды и просто использовать ее (или даже использовать сам showcert в команде:
certbot certonly —webroot /var/www/habr `showcert -o dnames habr.ru`
Попробуйте, например, showcert -o dnames google.com .
Заключение
Утилита простая, синтаксис очевидный и простой, не требует запоминания и для большинства частых админских операций — работает замечательно! Пригодна для отслеживания протухающих сертификатов (через openssl это сложнее). Без нее можно обойтись, но с ней проще.
Очень советую попробовать 🙂
Проверка SSL на валидность при помощи openssl
Частенько приходится устанавливать сертификаты и бывают не соответствия, что бы убедится что сертификаты валидны есть openssl который в этом нам поможет.
Проверка pem,crt — сертификата вместе с цепочкой(если у вас несколько файлов, объедините в один, сначала идет сертификат потом цепочка)
openssl x509 -noout -modulus -in server.crt | openssl md5
openssl rsa -noout -modulus -in server.key | openssl md5
openssl req -noout -modulus -in request.csr | openssl md5
MD5 у всех должен совпадать — но для работоспособности должны быть одинаковы только у приватного ключа и сертификата, csr вам может пригодится если вы соберетесь продлевать данный сертификат.
Данная команда покажет информацию о сертификате
openssl x509 -in certificate.crt -text -noout
openssl rsa -in server.key -check
openssl s_client -connect clsv.ru:443
openssl s_client -proxy 192.168.103.115:3128 -connect clsv.ru:443
openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout ./key.pem -out cert.pem -subj /C=/ST=/L=/O=/CN=clsv.ru
И в каталоге у вас появится Ключ — key.pem и Сертификат cert.pem и теперь можно их использовать для шифрования трафика вашего сервиса.
Сделать PFX сертификат из имеющихся
openssl pkcs12 -export -out domain.name.pfx -inkey domain.name.key -in domain.name.crt