Что такое файл PEM и как его использовать? — CloudSavvy ИТ
Shutterstock / FGC
PEM — это формат файла-контейнера, который часто используется для хранения криптографических ключей. Он используется для разных целей, поскольку просто определяет структуру и тип кодировки файла, используемого для хранения небольшого количества данных.
Что такое файл PEM?
PEM — это просто стандарт; они содержат текст, а формат диктует, что файлы PEM начинаются с…
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Все, что находится между ними, закодировано в base64 (прописные и строчные буквы, цифры, + и /). Это формирует блок данных, который можно использовать в других программах. Один файл PEM может содержать несколько блоков.
Его можно использовать для представления всех видов данных, но обычно он используется для кодирования ключевых файлов, таких как ключи RSA, используемые для SSH, и сертификаты, используемые для шифрования SSL. Файл PEM сообщит вам, для чего он используется в заголовке; например, вы можете увидеть, что файл PEM начинается с…
… За которой следует длинная строка данных, которая на самом деле является закрытым ключом RSA.
Файлы PEM с сертификатами SSL
Файлы PEM используются для хранения сертификатов SSL и связанных с ними закрытых ключей. Несколько сертификатов входят в полную цепочку SSL, и они работают в следующем порядке:
- Сертификат конечного пользователя, который назначается вашему доменному имени центром сертификации (ЦС). Это файл, который вы используете в nginx и Apache для шифрования HTTPS.
- До четырех дополнительных промежуточных сертификатов, выдаваемых более мелкими центрами сертификации вышестоящими органами.
- Корневой сертификат, высший сертификат в цепочке, самоподписанный первичным ЦС.
На практике каждый сертификат перечисляется в файле PEM с использованием отдельных блоков:
—— BEGIN CERTIFICATE —— // конечный пользователь —— END CERTIFICATE —— —— BEGIN CERTIFICATE —— // промежуточный —— END СЕРТИФИКАТ —— —— НАЧАТЬ СЕРТИФИКАТ —— // корень —— КОНЕЦ СЕРТИФИКАТА ——
Эти файлы вам предоставит поставщик SSL для использования на вашем веб-сервере. Например, certbot LetsEncrypt генерирует следующие сертификаты, помещенные в / etc / letsencrypt / live / your-domain-name /:
cert.pem chain.pem fullchain.pem privkey.pem
- cert.pem — это сертификат конечного пользователя.
- chain.pem — остальная часть цепочки; в данном случае это только корневой сертификат LetsEncrypt.
- fullchain.pem — это сочетание cert.pem и chain.pem. Это файл, переданный в nginx с директивой ssl_certificate.
- Privkey.pem — это закрытый ключ RSA, созданный вместе с сертификатом.
Они также могут использовать расширение .crt; если вы самостоятельно подписали сертификат с помощью OpenSSL, вы получите файл CRT, а не PEM, хотя содержимое останется прежним, и использование будет таким же.
Чтобы использовать свои сертификаты, вам необходимо передать их в качестве параметров для вашего веб-сервера. Для nginx вы захотите указать ssl_certificate (файл PEM полной цепочки) и ssl_certificate_key (файл PEM закрытого ключа RSA) после включения SSL:
ssl_certificate /etc/letsencrypt/live/yourdomain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain/privkey.pem;
Для Apache установка в основном такая же, но вам нужно будет использовать директивы SSLCertificateFile и SSLCertificateKeyFile:
SSLCertificateFile /etc/letsencrypt/live/yourdomain/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain/privkey.pem
Файлы PEM с SSH
Файлы PEM также используются для SSH. Если вы когда-либо запускали ssh-keygen для использования ssh без пароля, ваш
/ .ssh / id_rsa является файлом PEM, только без расширения.
В частности, Amazon Web Services предоставляет вам файл PEM, содержащий закрытый ключ, всякий раз, когда вы создаете новый экземпляр, и вы должны использовать этот ключ, чтобы иметь возможность подключаться к новым экземплярам EC2 по SSH.
Вам нужно будет использовать флаг -i с ssh, чтобы указать, что вы хотите использовать этот новый ключ вместо id_rsa:
ssh -i keyfile.pem root @ host
Это позволит вам войти на сервер как обычно, но вам придется каждый раз указывать этот флаг.
Более простой способ — добавить закрытый ключ к вашему ssh-агенту с помощью ssh-add:
Однако это не сохраняется при перезагрузке, поэтому вам нужно запустить эту команду при запуске или добавить ее в связку ключей macOS.
Конечно, вы всегда можете просто добавить свой первичный открытый ключ к
/ .ssh / authorized_keys экземпляра после того, как вы один раз вошли в систему, но этот метод должен работать из коробки для любых новых экземпляров в будущем.
Стоит отметить, что вам все равно следует заблокировать свой SSH-сервер, даже если вы сами используете ключи.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Что такое файл Pem и чем он отличается от других форматов файлов сгенерированных ключей OpenSSL?
Я отвечаю за поддержку двух серверов Debian. Каждый раз, когда мне приходится что-то делать с сертификатами безопасности, я ищу в Google учебники и бьюсь, пока не найдут ответ
Однако в своих поисках я часто натыкаюсь на различные форматы файлов (.key, .csr, .pem), но мне никогда не удавалось найти хорошее объяснение назначения каждого формата.
Я хотел бы узнать, не могли бы вы дать мне разъяснения по этому вопросу?
Ответ 1
- PEM — регулируется RFC, используется преимущественно в программах с открытым исходным кодом. Он может иметь различные расширения (.pem, .key, .cer, .cert и т.д.).
- PKCS7 — Открытый стандарт, используемый Java и поддерживаемый Windows. Не содержит закрытый ключ.
- PKCS12 — закрытый стандарт Microsoft, который позже был определен в RFC и обеспечивает повышенную безопасность по сравнению с обычным текстовым форматом PEM. Он может содержать закрытый ключ. Он используется преимущественно в системах Windows и может быть свободно преобразован в формат PEM с помощью OpenSSL.
- DER — родительский формат PEM. Полезно рассматривать его как двоичную версию файла PEM с кодировкой base64. Редко используется за пределами Windows.
Ответ 2
PEM — сам по себе не является сертификатом, это просто способ кодирования данных. Сертификаты X.509 — это один из типов данных, которые обычно кодируются с помощью PEM.
PEM — это сертификат X.509 (структура которого определена с помощью ASN.1), закодированный с помощью ASN.1 DER (distinguished encoding rules), затем закодированный Base64 кодировкой и вставленный между заголовками текста (BEGIN CERTIFICATE и END CERTIFICATE).
Вы можете представить те же данные, используя представления PKCS#7 или PKCS#12, и для этого можно использовать утилиту командной строки OpenSSL.
Очевидным преимуществом PEM является то, что его безопасно вставлять в тело электронного сообщения, поскольку он имеет заголовки и 7-битную кодировку.
RFC1422 содержит более подробную информацию о стандарте PEM в части, касающейся ключей и сертификатов.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
What is a Pem file and how does it differ from other OpenSSL Generated Key File Formats?
I am responsible for maintaining two Debian servers. Every time I have to do anything with security certificates, I Google for tutorials and beat away until it finally works.
However, in my searches I often come across different file formats ( .key , .csr , .pem ) but I’ve never been able to find a good explanation of what each file format’s purpose is.
I was wondering if the good folks here at ServerFault could provide some clarification on this matter?
3 Answers 3
SSL has been around for long enough you’d think that there would be agreed upon container formats. And you’re right, there are. Too many standards as it happens. In the end, all of these are different ways to encode Abstract Syntax Notation 1 (ASN.1) formatted data — which happens to be the format x509 certificates are defined in — in machine-readable ways.
- .csr — This is a Certificate Signing Request. Some applications can generate these for submission to certificate-authorities. The actual format is PKCS10 which is defined in RFC 2986. It includes some/all of the key details of the requested certificate such as subject, organization, state, whatnot, as well as the public key of the certificate to get signed. These get signed by the CA and a certificate is returned. The returned certificate is the public certificate (which includes the public key but not the private key), which itself can be in a couple of formats.
- .pem — Defined in RFC 1422 (part of a series from 1421 through 1424) this is a container format that may include just the public certificate (such as with Apache installs, and CA certificate files /etc/ssl/certs ), or may include an entire certificate chain including public key, private key, and root certificates. Confusingly, it may also encode a CSR (e.g. as used here) as the PKCS10 format can be translated into PEM. The name is from Privacy Enhanced Mail (PEM), a failed method for secure email but the container format it used lives on, and is a base64 translation of the x509 ASN.1 keys.
- .key — This is a (usually) PEM formatted file containing just the private-key of a specific certificate and is merely a conventional name and not a standardized one. In Apache installs, this frequently resides in /etc/ssl/private . The rights on these files are very important, and some programs will refuse to load these certificates if they are set wrong.
- .pkcs12 .pfx .p12 — Originally defined by RSA in the Public-Key Cryptography Standards (abbreviated PKCS), the "12" variant was originally enhanced by Microsoft, and later submitted as RFC 7292. This is a password-protected container format that contains both public and private certificate pairs. Unlike .pem files, this container is fully encrypted. Openssl can turn this into a .pem file with both public and private keys: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes
A few other formats that show up from time to time:
- .der — A way to encode ASN.1 syntax in binary, a .pem file is just a Base64 encoded .der file. OpenSSL can convert these to .pem ( openssl x509 -inform der -in to-convert.der -out converted.pem ). Windows sees these as Certificate files. By default, Windows will export certificates as .DER formatted files with a different extension. Like.
- .cert .cer .crt — A .pem (or rarely .der) formatted file with a different extension, one that is recognized by Windows Explorer as a certificate, which .pem is not.
- .p7b .keystore — Defined in RFC 2315 as PKCS number 7, this is a format used by Windows for certificate interchange. Java understands these natively, and often uses .keystore as an extension instead. Unlike .pem style certificates, this format has a defined way to include certification-path certificates.
- .crl — A certificate revocation list. Certificate Authorities produce these as a way to de-authorize certificates before expiration. You can sometimes download them from CA websites.
In summary, there are four different ways to present certificates and their components:
Формат SSL сертификата: как конвертировать сертификат в .pem, .cer, .crt, .der, pkcs или pfx?
PEM – наиболее популярный формат среди сертификационных центров. PEM сертификаты могут иметь расширение .pem, .crt, .cer, и .key (файл приватного ключа). Она представляют собой ASCII файлы, закодированные по схеме Base64. Когда вы открываете файл pem формата в текстовом редакторе, вы можете увидеть, что текст кода в нем начинается с тега «—— BEGIN CERTIFICATE ——» и заканчивая тегом «—— END CERTIFICATE ——«. Apache и другие подобные серверы используют сертификаты в PEM формате. Обратите внимание, что в одном файле может содержатся несколько SSL сертификатов и даже приватный ключ, один под другим. В таком случае каждый сертификат отделен от остальных ранее указанными тегами BEGIN и END. Как правило, для установки SSL сертификата на Apache, сертификаты и приватный ключ должны быть в разных файлах.
Формат сертификата DER
DER формат – это бинарный тип сертификата вместо формата PEM. В PEM формате чаще всего используется расширение файла .cer, но иногда можно встретить и расширение файла .der. Поэтому чтобы отличить SSL сертификат в формате PEM от формата DER, следует открыть его в текстовом редакторе и найти теги начала и окончания сертификата (BEGIN/END). DER SSL сертификаты, как правило, используются на платформах Java.
PKCS # 7 / P7B сертификат
SSL сертификаты в формате PKCS # 7 или P7B — это файлы, которые хранятся в формате Base64 ASCII и имеют расширение файла .p7b или .p7c. P7B сертификаты содержат теги начала сертификата «—— BEGIN PKCS7 ——» и его конца «—— END PKCS7 ——«. Файлы в формате P7B включают в себя только ваш SSL сертификат и промежуточные SSL сертификаты. Приватный ключ при этом идет отдельным файлом. SSL сертификаты в формате PKCS # 7 / P7B поддерживают следующие платформы: Microsoft Windows и Java Tomcat.
PFX сертификат (формат PKCS # 12)
Формат SSL сертификата PKCS # 12 или, как его еще называют, PFX сертификат — бинарный формат, при использовании которого в одном зашифрованном файле хранится не только ваш личный сертификат сервера и промежуточные сертификаты центра сертификации, но и ваш закрытый ключ. PFX файлы, как правило, имеют расширение .pfx или .p12. Обычно, файлы формата PFX используются на Windows серверах для импорта и экспорта файлов сертификатов и вашего приватного ключа.
Конвертация SSL сертификатов в OpenSSL
Данные команды OpenSSL дают возможность преобразовать сертификаты и ключи в разные форматы. Для того чтобы сделать их совместимыми с определенными видами серверов, либо ПО. К примеру, Вам необходимо конвертировать обыкновенный файл PEM, который будет работать с Apache, в формат PFX (PKCS # 12) с целью применения его с Tomcat, либо IIS.
- Конвертировать PEM в DER
Онлайн конвертер SSL сертификатов
Также существуют онлайн программы для конвертации сертификатов из одного формата в другой. Например, мы можем посоветовать SSL конвертер от SSLShopper. Используйте этот SSL конвертер для преобразования SSL-сертификатов различных форматов, таких как PEM, DER, P7B и PFX. Чтобы использовать SSL-конвертер, просто выберите файл сертификата и его текущий тип (он определяется по формату расширения), затем выберите формат, в какой Вам необходимо преобразовать SSL сертификат и нажмите кнопку “Convert Certificate”. Обратите внимание, что в зависимости от того, в какой формат вам нужно конвертировать SSL сертификат, от вас потребуются разные исходящие файлы.
Конвертация PEM в DER
Для конвертации стандартного сертификата в формате PEM в бинарный формат DER, потребуется только файлSSL сертификата. Обычно, вы его получаете в архиве вместе с промежуточными сертификатами. Как правило, в его названии указано имя вашего домена.
Конвертация PEM в P7B / PKCS#7
Если же вам нужно преобразовать ваш стандартный SSL сертификат в файл формата P7B / PKCS#7, вы можете кроме SSL сертификата вашего домена загрузить также файлы с цепочками сертификатов. Более подробно о том, что такое цепочка SSL сертификатов, мы писали в статье о CA-bundle.
Конвертация PEM в PFX / PKCS#12
Обратите внимание, что для конвертации стандартного формата SSL сертификата необходимо добавить еще один файл – ваш приватный ключ. Приватный ключ – это конфиденциальная информация, которая должна быть только у вас. Поэтому центры сертификации не высылают его месте с файлами вашего сертификата. Приватный ключ создается в момент генерации CSR запроса. Если вы генерируете CSR у себя на сервере, на нем же должен автоматически сохраниться ключ. Если вы создаете CSR запрос в специальном инструменте на нашем сайте (на странице по ссылке или во время заполнения технических данных), ключ показывается вам в конце генерации CSR (или введения технических данных), но не сохраняется в нашей базе данных. Поэтому важно, чтобы вы самостоятельно сохранили приватный ключ.