Поиск по сайту:

Что такое файл PEM и как вы его используете?


PEM — это формат файла-контейнера, который часто используется для хранения криптографических ключей. Он используется для самых разных целей, так как просто определяет структуру и тип кодирования файла, используемого для хранения части данных.

.PEM вариант №

PEM — это просто стандарт; они содержат текст, и формат требует, чтобы файлы PEM начинались с…

-----BEGIN <type>-----

…и закончить словами:

-----END <type>-----

Все, что находится между ними, закодировано в base64 (прописные и строчные буквы, цифры, + и /). Это формирует блок данных, который можно использовать в других программах. Один файл PEM может содержать несколько блоков.

Его можно использовать для представления всех видов данных, но обычно он используется для кодирования ключевых файлов, таких как ключи RSA, используемые для SSH, и сертификаты, используемые для шифрования SSL. Файл PEM расскажет вам, для чего он используется в заголовке; например, вы можете увидеть, что файл PEM начинается с…

-----BEGIN RSA PRIVATE KEY-----

…за которым следует длинная строка данных, которая является фактическим закрытым ключом RSA.

Файлы PEM с сертификатами SSL

Файлы PEM используются для хранения сертификатов SSL и связанных с ними закрытых ключей. Несколько сертификатов находятся в полной цепочке SSL и работают в следующем порядке:

  • Сертификат конечного пользователя, который назначается вашему доменному имени центром сертификации (ЦС). Это файл, который вы используете в nginx и Apache для шифрования HTTPS.
  • До четырех необязательных промежуточных сертификатов, выдаваемых более мелким центрам сертификации вышестоящими органами.
  • Корневой сертификат, самый высокий сертификат в цепочке, самоподписанный основным ЦС.

На практике каждый сертификат указан в файле PEM с использованием отдельных блоков:

-----BEGIN CERTIFICATE-----
  //end-user
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
  //intermediate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
  //root
-----END CERTIFICATE-----

Вам будут предоставлены эти файлы от вашего провайдера 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 необходимо указать ssl_certificate (файл PEM полной цепочки) и ssl_certificate_key (файл PEM закрытого ключа RSA):

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, содержащий закрытый ключ, всякий раз, когда вы создаете новый экземпляр, и вы должны использовать этот ключ, чтобы иметь возможность подключаться по SSH к новым экземплярам EC2.

Вам нужно будет использовать флаг -i с ssh, чтобы указать, что вы хотите использовать этот новый ключ вместо id_rsa:

ssh -i keyfile.pem root@host

Это позволит вам войти на сервер как обычно, но вам придется каждый раз указывать этот флаг.

Более простой способ — добавить закрытый ключ к вашему ssh-агенту с помощью ssh-add:

ssh-add keyfile.pem

Однако это не сохраняется при перезагрузке, поэтому вам нужно будет запустить эту команду при запуске или добавить ее в цепочку ключей macOS.

Конечно, вы всегда можете просто добавить свой первичный открытый ключ к ~/.ssh/authorized_keys экземпляра после того, как вы вошли в систему один раз, но этот метод должен работать из коробки для любых новых экземпляров. идти вперед.

Стоит отметить, что вам все равно следует заблокировать свой SSH-сервер, даже если вы сами используете ключи.