Кодировки сертификатов с X509Certificates и keytool

Я изучаю X509Certificates и keytool, и меня смущает следующее:
Сертификат может храниться в формате cer (Canonical Encoding Rules), а также в формате DER?
Я просматриваю различные учебные пособия SUN по keytool и в некоторых случаях кажется, что они импортируют сертификат, оканчивающийся на ".cer", или экспортируют сертификат с расширением ".cer".
Например.

keytool -importcert -alias abc -file ABCCA.cer  OR  
keytool -exportcert -alias mykey -file MJ.cer

Означает ли это кодировку cer? Потому что изначально у меня сложилось впечатление, что если вы делаете экспорт в keytool, по умолчанию используется der.
Или cer и der взаимозаменяемы?

Спасибо


person Cratylus    schedule 02.03.2011    source источник
comment
Для сертификата не существует такой вещи, как кодировка cer. .cer — это просто обычное, но в остальном бессмысленное расширение файла, используемое для сертификатов. Я считаю, что Microsoft использует его по умолчанию для сертификатов X509 с кодировкой DER, потому что Microsoft всегда должна делать что-то по-другому, даже если они делают это одинаково.   -  person President James K. Polk    schedule 03.03.2011
comment
@GregS: Так правильно ли говорить, что сертификаты должны быть только в формате DER или PEM? Значит, фактическое расширение имени файла не имеет значения?   -  person Cratylus    schedule 03.03.2011
comment
DER — это правила кодирования, применимые к любым данным, описанным в ASN.1, а не только к сертификатам. PEM также является методом кодирования, который включает в себя кодирование содержимого DER по основанию 64 и наложение строк заголовка и нижнего колонтитула вокруг результата. keytool поддерживает сертификаты X509 с кодировкой DER, а также кодировку PEM для кодировки DER сертификатов X509. Кроме того, для цепочек сертификатов keytool поддерживает объекты PKCS#7 в кодировке DER, а также их кодировку PEM. Расширение файла всегда не имеет значения.   -  person President James K. Polk    schedule 03.03.2011
comment
Итак, если расширение файла не имеет значения, если пользователь указывает путь к файлу в программе Java для файла, который может быть в формате DER, PEM, P12 или PKCS7, как это будет обрабатываться в программе? Я имею в виду, что мне интересно знать, требуется ли знать кодировку файла перед выполнением какой-либо обработки с ним. Например, обнаружение того, что предоставленный файл находится в DER, поэтому Base64 кодирует его, например, до сохранение в виде текстового файла или сохранение его в БД и т. д. И если он уже находится в PEM, просто сохраните его. Не делайте ничего другого, т.е. кодируйте его   -  person Cratylus    schedule 03.03.2011
comment
Я не уверен, как keytool делает это точно. Вы можете многое понять из первых нескольких байтов файла. Файлы PEM начинаются с чего-то вроде ---BEGIN, поэтому, если вы видите, что знаете, что вам нужно декодировать base64 оставшиеся строки, чтобы получить кодировку DER. В противном случае это уже должна быть кодировка DER. Затем вы проверяете первые несколько байтов кодировки DER, чтобы увидеть, соответствует ли она кодировке сертификата X509, структуре PKCS#7 или ни тому, ни другому.   -  person President James K. Polk    schedule 04.03.2011


Ответы (1)


По умолчанию keytool экспортирует с использованием DER («Отличительные правила кодирования»), распространенной двоичной кодировки для сертификатов X509.

Это просто неудачное совпадение, что CER - это имя другой кодировки ASN.1, а также первые три буквы "сертификата"...

person SimonJ    schedule 02.03.2011
comment
Так правильно ли говорить, что сертификаты должны быть только в формате DER или PEM? Таким образом, фактическое расширение имени файла не имеет значения? - person Cratylus; 03.03.2011
comment
Да, он экспортируется в DER, если вы не используете параметр -rfc, и в этом случае он использует PEM (который на самом деле представляет собой просто DER в кодировке base64 с заголовком и нижним колонтитулом). Для импорта поддерживаются DER, PEM и PKCS#7; расширение файла не имеет значения. - person SimonJ; 03.03.2011
comment
Итак, если расширение файла не имеет значения, если пользователь указывает путь к файлу в программе Java для файла, который может быть в формате DER, PEM, P12 или PKCS7, как это будет обрабатываться в программе? Я имею в виду, что мне интересно знать, требуется ли знать кодировку файла перед выполнением какой-либо обработки с ним. Например, обнаружение того, что предоставленный файл находится в DER, поэтому Base64 кодирует его, например, до сохранение в виде текстового файла или сохранение его в БД и т. д. И если он уже находится в PEM, просто сохраните его. Не делайте ничего другого, т.е. кодируйте его - person Cratylus; 03.03.2011
comment
Не совсем уверен, что вы спрашиваете. keytool обычно хранит ключи и сертификаты в собственном формате JKS (если у вас не установлен какой-либо альтернативный провайдер), поэтому при необходимости он преобразует различные кодировки в/из него. - person SimonJ; 04.03.2011
comment
В случае java-программы (любая прикладная программа, созданная программистом, которая обрабатывает сертификаты для обеспечения функции безопасности) получает файл, указанный пользователем. Как эта программа может определить, является ли файл, предоставленный пользователем, P12 или PEM или DER или PKCS7 ?Должен ли пользователь указывать формат? - person Cratylus; 04.03.2011