Useful openssl commands to view certificate content
We generate a private key with des3 encryption using following command which will prompt for passphrase:
To view the content of this private key we will use following syntax:
So in our case the command would be:
Sample output from my terminal (output is trimmed):
OpenSSL — Private Key File Content
View the content of CSR (Certificate Signing Request)
We can use the following command to generate a CSR using the key we created in the previous example:
Syntax to view the content of this CSR:
Sample output from my terminal:
OpenSSL — CSR content
View the content of CA certificate
We can use our existing key to generate CA certificate, here ca.cert.pem is the CA certificate file:
To view the content of CA certificate we will use following syntax:
Sample output from my terminal (output is trimmed):
OpenSSL — CA Certificate content
View the content of signed Certificate
We can create a server or client certificate using following command using the key, CSR and CA certificate which we have created in this tutorial. Here server.crt is our final signed certificate
To view the content of similar certificate we can use following syntax:
Sample output from my server (output is trimmed):
OpenSSL — Certificate content
You can use the same command to view SAN (Subject Alternative Name) certificate as well.
Conclusion
In this tutorial we learned about openssl commands which can be used to view the content of different kinds of certificates. I have kept the tutorial short and crisp keeping to the point, you may check other articles on openssl in the left sidebar to understand how we can create different kinds of certificates using openssl.
Didn’t find what you were looking for? Perform a quick search across GoLinuxCloud
If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.
For any other feedbacks or questions you can either use the comments section or contact me form.
How To Read The SSL Certificate Info From the CLI
This guide will show you how to read the SSL Certificate Information from a text-file on your server or from a remote server by connecting to it with the OpenSSL client.
Read the SSL Certificate information from a text-file at the CLI
If you have your certificate file available to you on the server, you can read the contents with the openssl client tools.
By default, your certificate will look like this.
Which doesn’t really tell you much.
However, you can decrypt that certificate to a more readable form with the openssl tool.
It will display the SSL certificate output like expiration date, common name, issuer, …
Here’s what it looks like for my own certificate.
The openssl tools are a must-have when working with certificates on your Linux server.
Read the SSL Certificate information from a remote server
You may want to monitor the validity of an SSL certificate from a remote server, without having the certificate.crt text file locally on your server? You can use the same openssl for that.
To connect to a remote host and retrieve the public key of the SSL certificate, use the following command.
This will connect to the host ma.ttias.be on port 443 and show the certificate. It’s output looks like this.
There’s many more output, like the intermediate CA certificates, the raw certificates (encoded) and more information on the ciphers used to negotiate with the remote server.
You can use it to find the expiration date, to test for SSL connection errors, …
How to Check Certificate with OpenSSL
Learn how to use the openssl command to check various kinds of certificates on Linux systems.
Keeping a tab on your SSL certificates is a crucial part of a sysadmin’s job.
There are various ways to do it. You can use a monitoring service like Checkmk to monitor the certificates or you can use the good old openssl command for this purpose.
In this guide, I’ll explain to you how to use the openssl command to check various certificates on Linux systems.
Optional: Generating a TLS/SSL Certificate
To demonstrate this guide, I’ll create some keys and certificate files. If you already have these things, you can skip to the next step.
Let’s begin with a private key, use the following command to create a private key:
The above command will create a key with the name my_private_key.key file.
Now that you have a private key, create a public key with it:
That’s good, you now have your private and public keys and you can use them to generate a certificate file. It is important to know beforehand that you are generating a self-signed certificate here. This is because using a CA (Certificate Authority) for signing a certificate requires additional costs.
But don’t worry. Your certificate will suffice as you will use it only for demonstration purposes. Use the below command to build your certificate:
The above command will result in a PEM-type certificate file with the name mycert.pem.
Each option here has its meaning. The 365 indicates the period in days for which the certificate will be valid.
Now enter the details for various questions on the prompt:
You can now see all your files listed in the current directory with the ls command:
Checking the Status of a Certificate
It is very important to ensure the SSL certificates you are using are not expired or on the verge of being expired. Negligence in this regard can have a devastating impact on the production systems.
Certificate files usually have a .pem or .crt extension. You can use the openssl commands to explore the details of a certificate. For example, the below command gives the details of the certificate you created above:
You will see a long output printed on your terminal describing various attributes of the certificate as: Version, Serial Number, Signature Algorithm, Issuer, Validity Status, etc.
Similarly, you can use this command with a port with an SSL certificate attached to it. I guess you will have figured out the validity range of our certificate from the above output.
Always use this command when you plan to replace or renew your SSL certificate. This way you are likely to avoid any mistakes in certificate management.
Using OpenSSL to View the Status of a Website’s Certificate
Let me show you how you can use openssl command to verify and check SSL certificate validity for this website www.linuxhandbook.com or a remote system with a fully qualified domain name (FQDN):
As you can see from the output, the target certificate is valid only for the specified range: May 5, 2022 to May 5, 2023.
Let’s break down this command:
- s_client: This command implements a general SSL/TLS-based client and establishes an SSL/TLS connection to a remote system.
- -connect host:port: Here, you specify the host and port number to connect to.
- x509: This command has multiple uses like showing certificate-related information, converting certificates to various other forms, signing certificate requests, etc.
Verifying Information within a Certificate
CER and CRT type files can be used in parallel as both are identical. The openssl command can also be used to verify a Certificate and CSR(Certificate Signing Request).
Verifying a .crt Type Certificate
For verifying a crt type certificate and to get the details about signing authority, expiration date, etc., use the command:
Checking a .csr (Certificate Signing Request) type file
You can use the below command to check a csr type file and retrieve the CSR data entered while creating this file:
Verifying a KEY type file
This is an extra tip for verifying a KEY type file and its consistency:
Working with .pem type Files
In a mega IT setup, you may find thousands of servers out there. They only accept certificates that are formatted in a particular manner. This means if you are using a .pem format for a server that needs .crt format, then you are at a complete loss until you convert them to the desired format.
Technically, there are some commands that you can use to convert certificates and keys to other formats. In this way, you can make them work with different types of formats required by various servers. For e.g., you can convert a DER file (.cer, .crt or .der) to PEM format as:
To find the expiration date of a .pem type TLS/SSL certificate, the following command is very handy:
Verifying a Public Key
The public key contained in a private key and a certificate must be the same. You can check this with the openssl command as:
As you can see, the outputs from the above commands are the same.
Conclusion
You have so far seen how to generate keys and certificates, how to change one form to another, and how to verify different types of files.
Keeping knowledge of your certificate status is very important and OpenSSL does a good job here. Also, if you do not want to engage (or mess up) with the command line, you can use downtime monitoring services like Better Uptime to automatically check the certificates.
Как просмотреть содержимое ключей и сертификатов SSL
Мы можем подробно изучить содержимое всех созданных в OpenSSL файлов, а также при необходимости конвертировать их в другие форматы.
В следующих командах используются тестовые файлы со следующими именами:
- rootCA.key — ключ CA
- rootCA.crt — сертификат CA
- mydomain.com.key — ключ сервера
- mydomain.com.csr — запрос за подпись сертификата сайта
- mydomain.com.crt — сертификат сайта
Обратите внимание на расширения файлов — они могут отличаться от тех, которые используются в других инструкциях. Например, вместо .key и .crt может использоваться расширение .pem. Расширение файла не имеет особого значения кроме как служить подсказкой пользователю, что именно находится в этом файле. Это же самое касается и имён файлов — вы можете выбирать любые имена.
Все эти файлы являются текстовыми:
Там мы увидим примерно следующее:
Если вам эти строки кажутся знакомыми на кодировку Base64, то вы совершенно правы — это она и есть. (Смотрите также «Как быстро узнать и преобразовать кодировку»).
Этот формат, называемый форматом PEM, расшифровывается как Privacy Enhanced Mail.
PEM — это текстовое представление реального двоичного ключа или сертификата в формате DER. Представляет собой двоичного формата DER в кодировке base64 и с дополнительными строками «——BEGIN PRIVATE KEY——», «——BEGIN CERTIFICATE——» и другими в начале файла и строками «——END PRIVATE KEY——», «——END CERTIFICATE——» в конце файла.
Мы можем хранить двоичную версию файла только с кодировкой DER, но наиболее распространенным способом является версия PEM.
Вы можете увидеть структуру приватного следующей командой:
Опция -in ИМЯ_ФАЙЛА указывает имя файла ввода для чтения ключа или стандартный ввод, если эта опция не указана. Если ключ зашифрован, будет запрошен пароль.
Опция -text печатает различные компоненты открытого или закрытого ключа в виде простого текста в дополнение к закодированной версии.
Любой формат ключа на самом деле является контейнером для набора длинных чисел. Все остальные данные можно считать «шумом».
Закрытый ключ содержит: модуль (modulus), частный показатель (privateExponent), открытый показатель (publicExponent), простое число 1 (prime1), простое число 2 (prime2), показатель степени 1 (exponent1), показатель степени 2 (exponent2) и коэффициент (coefficient).
Открытый ключ содержит только модуль (modulus) и открытый показатель (publicExponent).
Вы можете из влечь из файла ключей публичный ключ:
По умолчанию выводится закрытый ключ: с опцией -pubout вместо него будет выведен открытый ключ. Эта опция устанавливается автоматически, если ввод является открытым ключом.
Следующая команда покажет информацию о публичном ключе:
По умолчанию из входного файла считывается закрытый ключ. Используемая в предыдущей команде опция -pubin делает так, что вместо приватного ключа читается открытый ключ.
Можно также добавить опцию -noout — с ней будет выведена та же самая информация, но не будет показана кодированная версия ключа.
С такими же опциями, но уже используя команду req, можно изучить содержимое запроса на подпись сертификата:
При создании SSL сертификата мы создали две пары ключей (корневые и для домена), то есть это файлы rootCA.key и mydomain.com.key, но по своей технической сути они идентичны.
Что касается сертификатов, которых у нас тоже два (rootCA.crt и mydomain.com.crt), то по своей природе они не являются одинаковыми: корневой сертификат является самоподписанным, а сертификат домена подписан приватным корневым ключом.
Информацию о содержимом сертификатов можно посмотреть командой x509 (остальные опции нам уже знакомы):
Самоподписанные сертификаты обычно содержат только самые основные данные сертификатов, как показано в предыдущем примере. Для сравнения, сертификаты, выданные общедоступными центрами сертификации, гораздо интереснее, поскольку они содержат ряд дополнительных полей (с помощью механизма расширений X.509).
Сертификат (цепочку сертификатов) любого сайта вы можете получить следующей командой (замените w-e-b.site на интересующий вас сайт):
Вы увидите сертификаты (один или несколько), найдите по полю CN тот, который вас интересует, например, сертификат домена w-e-b.site:
И скопируйте содержимое начиная с ——BEGIN CERTIFICATE—— и заканчивая ——END CERTIFICATE——. Затем сохраните это в файл.
Вы также можете сохранить сертификат центра сертификации и изучить его:
К примеру, сертификат сайта w-e-b.site я сохранил в файл w-e-b.site.crt, для просмотра информации о нём:
Issuer указывает на организацию, которая выдала (подписала) сертификат:
Validity — срок действия сертификата:
Subject: CN — домен (IP адрес) для которого предназначен сертификат:
Поддомены в группе X509v3 extensions → X509v3 Subject Alternative Name (подробности чуть позже):
Теперь бегло рассмотрим расширения X.509.
Расширение Basic Constraints используется для маркировки сертификатов как принадлежащих ЦС, давая им возможность подписывать другие сертификаты. В сертификатах, отличных от CA, это расширение будет либо пропущено, либо будет установлено значение CA, равное FALSE. Это расширение является критическим, что означает, что все программные сертификаты должны понимать его значение.
Расширения Key Usage (KU) и Extended Key Usage (EKU) ограничивают возможности использования сертификата. Если эти расширения присутствуют, то разрешены только перечисленные варианты использования. Если расширения отсутствуют, ограничений на использование нет. То, что вы видите в этом примере, типично для сертификата веб-сервера, который, например, не позволяет подписывать код:
Расширение CRL Distribution Points перечисляет адреса, по которым можно найти информацию о списке отзыва сертификатов (CRL) ЦС. Эта информация важна в случаях, когда сертификаты необходимо отозвать. CRL — это подписанные CA списки отозванных сертификатов, публикуемые через регулярные промежутки времени (например, семь дней).
Примечание: возможно, вы заметили, что местоположение CRL не использует защищённый сервер, и вам может быть интересно, является ли ссылка небезопасной. Не является. Поскольку каждый CRL подписан центром сертификации, который его выпустил, браузеры могут проверить его целостность. В том же случае, если бы CRL были доступны по TLS (адрес включал бы в себя протокол HTTPS), то браузеры могут столкнуться с проблемой «курицы и яйца», в которой они хотят проверить статус отзыва сертификата, используемого сервером, доставляющим сам CRL!
Расширение Certificate Policies используется для указания политики, в соответствии с которой был выпущен сертификат. Например, именно здесь можно найти индикаторы расширенной проверки (EV). Индикаторы представлены в форме уникальных идентификаторов объектов (OID) и являются уникальными для выдающего ЦС. Кроме того, это расширение часто содержит один или несколько пунктов CPS, которые обычно являются веб-страницами или документами PDF.
Расширение Authority Information Access (AIA) обычно содержит две важные части информации. Во-первых, он перечисляет адрес ответчика CA OCSP, который можно использовать для проверки отзыва сертификатов в режиме реального времени. Расширение также может содержать ссылку, где находится сертификат эмитента (следующий сертификат в цепочке). В наши дни серверные сертификаты редко подписываются непосредственно доверенными корневыми сертификатами, а это означает, что пользователи должны включать в свою конфигурацию один или несколько промежуточных сертификатов. Ошибки легко сделать, и сертификаты будут признаны недействительными. Некоторые клиенты (например, Internet Explorer) будут использовать информацию, представленную в этом расширении для исправления неполной цепочки сертификатов, но многие клиенты этого не сделают.
Расширения Subject Key Identifier и Authority Key Identifier устанавливают уникальные идентификаторы ключа субъекта и ключа авторизации соответственно. Значение, указанное в расширении Authority Key Identifier сертификата, должно соответствовать значению, указанному в расширении Subject Key Identifier в выдающем сертификате. Эта информация очень полезна в процессе построения пути сертификации, когда клиент пытается найти все возможные пути от конечного (серверного) сертификата до доверенного корня. Центры сертификации часто используют один закрытый ключ с несколькими сертификатами, и это поле позволяет программному обеспечению надёжно определять, какой сертификат может быть сопоставлен с каким ключом. В реальном мире многие цепочки сертификатов, предоставляемые серверами, недействительны, но этот факт часто остаётся незамеченным, поскольку браузеры могут находить альтернативные пути доверия.
Наконец, расширение Subject Alternative Name используется для перечисления всех имен хостов, для которых действителен сертификат. Это расширение раньше было необязательным; если его нет, клиенты возвращаются к использованию информации, представленной в Common Name (CN), которое является частью поля «Subject». Если расширение присутствует, то содержимое поля CN игнорируется во время проверки.
Рассмотрим опции команды x509, которые позволяют извлечь разнообразную информацию из сертификатов.
Чтобы показать издателя сертификата используйте опцию -issuer:
Опция -fingerprint вычисляет и выводит дайджест DER-кодированной версии всего сертификата. Это обычно называют «отпечатком». Из-за характера дайджестов сообщений, отпечаток сертификата является уникальным для этого сертификата, и два сертификата с одинаковым отпечатком могут считаться одинаковыми. Для сертификатов обычно не нужно сверять сертификаты по отпечаткам, но это имеет смысл при использовании самоподписанных сертификатов (например, получении сертификата для VNC сессии, когда нет другого способа проверить, что сертификат не был подменён при пересылке). В этом случае можно сверить отпечаток сертификата, например, по телефону или электронной почте.
Для показа отпечатка сертификата:
Чтобы вывести сертификат в виде строки символов в стиле C — char, используйте опцию -C:
Чтобы вывести расширения сертификата в текстовой форме, используйте опцию -ext. Несколько расширений можно перечислить через запятую, например "subjectAltName,subjectKeyIdentifier". Чтобы посмотреть весь список расширений:
Пример команды для вывода альтернативных имён в домене:
Пример информации об альтернативных именах домена:
Для вывода почтовых адресов, содержащихся в сертификате, используйте опцию -email. Адреса электронной почты могут отсутствовать в сертификате.
Для вывода адресов респондентов OCSP, если они присутствуют в сертификате, укажите опцию -ocsp_uri:
Для показа дат из сертификата имеются следующие опции:
- -startdate: Распечатывает дату начала сертификата, то есть дату notBefore (не ранее).
- -enddate: Распечатывает дату истечения срока действия сертификата, то есть дату notAfter (не позднее).
- -dates: Распечатывает даты начала и окончания срока действия сертификата.
Для вывода имени subject укажите опцию -subject:
Чтобы показать имя subject сертификата в форме RFC2253 используйте сочетание опций -subject -nameopt RFC2253:
Пример вывода имени subject сертификата в форме схемы на терминале, поддерживающем UTF8:
Опция -serial выводит серийный номер:
Чтобы извлечь публичный ключ из сертификата используйте опцию -pubkey:
Для глубокого понимания OpenSSL смотрите также полное руководство: «OpenSSL: принципы работы, создание сертификатов, аудит».