вторник, 24 декабря 2013 г.

Форматы файлов для хранения ключей/сертификатов

И так повторим теорию шифрования открытыми ключами:
Генерируется приватный ключ, который хранится в защищенном месте, на основе его генерируется публичный ключ, который предоставляется тем, кто хочет передавать сообщения автору и быть уверенным в том, что никто не сможет его прочитать кроме автора. Все что закодировано публичным ключем, может быть раскодированно только приватным.
Чтобы пользователь публичного ключа был действительно уверенным, что у него оказался ключ не злоумышленника, придумали сертификаты открытых ключей. Суть в том, что третье лицо "аля власть в сертификации открытыми ключами" CA под каждый публичный ключ вставляет свою цифровую подпись, которая имеет ограниченное время жизни, и его ответсвенность в том, чтобы гарантировать, что тот кто представляется собой в сертификате, действительно яляется собою и публичный ключ, которых хранится в этом сертификате действительно его.
Формат файла для сертификата и процедуру распределения открытых ключей с помошью сертификатов с цифровыми подписями определяется стандартом X.509.
Формат файла сертификата по стандарту 
X.509:
• Номер версии(текущая 3)
• Серийный номер
• Эмитент
• Субъект
• Открытый ключ субъекта (алгоритм, ключ)
• Период действия
• Дополнительные (необязательные) значения
• Алгоритм подписи сертификата
• Значение подписи сертификата

(*.p12) Personal Information Exchange (PKCS #12)
Файл, который является безопасным(кодирование + пароль на розархивирование/чтение) хранилищем(архивом) для приватных ключей, сертификатов,  и цепочек сертификатов.
Это единственный формат, который может быть использован для експортирования сертификата и его приватного ключа в java keystore(jks)/truststore(jts).

(*.p7b) Cryptographic Message Syntax Standard (PKCS #7)
Используется как хранилище для цепочек сертификатов.

(*.cer | *.der) DER-encoded binary X.509
Формат хранилища сертификатов в бинарном виде, который является стандартом для Internet. Он не для приватных ключей, ни для цепочек.
(*.der) Distinguished Encoding Rules


(*.cer | *.pem) Base64-encoded X.509
Используется для тех же целей, что и предыдущий, но способ хранения данных в файле отличается (похоже занимает больше места на диске, потому что не бинарный а текстовый).
(*.pem) Privacy Enhanced Email
Файл в котором хранятся ключи/сертификаты в обычном текстовом формате. Его конек в том, что данные могут оттуда и туда копироваться как в обычный текстовый файл через GUI операционных систем. Только вот нужно следить чтобы в отметках начала и конца(-----BEGIN ENCRYPTED PRIVATE KEY----- и -----END ENCRYPTED PRIVATE KEY-----) не терять "минусы". И если мы это делали в Windows, то в файле нужно будет поудалять возрврат каретки. Тоесть в файл можно позгружать и всю цепочку сертификатов, ключи и приватные и публичные, но обычно так никто не делает, их разбивают на отдельные файлы, особенно приватный ключ находится в отдельном файле.

(*.crt) альтернативное имя расширения *.cer, как для бинарного, так и аски-формата,  этот вариант более характерен для *nix мира, а cer соответсвует Microsoft Convention.

(*.csr) Certificate Signing Request
Файл, в который генерируется на основе [только что созданного] приватного ключа публичный ключ и добавляется информации о авторе этого сертификата. В файле оказывается только что сгенерированный публичный ключ автора и информация о нем. Этот файл отправляется на подпись к certificate-authorities(CA), который своей подписью под сертификатом гарантирует, что автор является действительно тем, кем представляется в сертификате, CA из этого файла генерирует сертификат в формате X.509.


(*.key) PKCS#8
Чеще всего в таком файле хранятся приватные ключи. Но также могут храниться и публичные.  Закодированы они могут быть как в формате pem, так и der.

Существует 4 основых манипуляции над сертификатами:
- Просмотр.
- Преобразование.
- Соединение.
- Извлечение.

Чтобы просмотеть содержимое сертификата будь то der или pem, оба нужно декодировать в человекочитаемый вид.
Прочитать PEM:
openssl x509 -in cert.pem -text -noout
openssl x509 -in cert.cer -text -noout
openssl x509 -in cert.crt -text -noout

Прочитать DER:
openssl x509 -in certificate.der -inform der -text -noout

Чтобы преобразовать один формат в другой мы используем команды.
PEM to DER:
openssl x509 -in cert.crt -outform der -out cert.der
DER to PEM:
openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

Соединение
Сервера например Apache требуют пару приватного и публичного ключа в одном файле. Также в один файл могут положить и ключи и полную цепочку. Самый простой способ создать такой общий файл это сохранить все в формате PEM, а потом просто скопировать контент каждого файла в один.

Извлечение
Нам прислали файл с цепочкой и ключами, но нам нужет только ключ, если обьединили PEMы, то тогда это просто: открыли, нашли по коментариям-отметкам и скопировали только то, что нам нужно.

Комментариев нет:

Отправить комментарий