Сертификаты: der, pem, x.509, pkcs#12
Много-много страшных слов. Где можно почитать об этом? Не RFC на английском, а что-нибудь "для чайников".
В частности интересно, как между собой связаны разные форматы, как можно конвертировать, как данные хранятся в опредённых форматах. Ну и всё остальное :-)
У меня есть несколько ссылок: основы openssl (программа, которая умеет шифровать данные симметричными алгоритмами, считать хэши, с сертификатами тоже работает), статья об использовании сертификатов (вторая часть, первой не видно).
комментариев: 11558 документов: 1036 редакций: 4118
А можно читать аккуратно, небольшими дозами.
Хорошо, тогда попробую рассказать что я знаю (попутно задавая вопросы), надеюсь, кто-нибудь укажет на ошибки...
Вот, например, файлы .pfx и .p12. Я правильно понимаю, что это абсолютно одно и то же, правильный вариант – .p12, просто Microsoft использует .pfx, чтобы всех запутать?
У меня есть сертификат для Webmoney Light. У него расширение .p12, очевидно, он в формате pkcs#12. Его можно сконвертировать в pem так:
# openssl pkcs12 -in cert.p12 -nodes > cert.pem
pkcs12 – указывает OpenSSL с чем он работает
in – файл с исходным сертификатом, если не задан, читается stdin
nodes – no des. По умолчанию для шифрования приватного ключа используется triple DES (ключ -des3). nodes – не использовать triple DES, без шифрования вообще. Ещё есть варианты просто DES (-des) и IDEA (-idea).
В полученном PEM-сертификате будут три больших куска base64-encoded данных. Два с комментариями BEGIN CERTIFICATE, один с комментарием BEGIN RSA PRIVATE KEY. Над ними текст вида
Над двумя другими кусками информация о моём сертификате и о RSA ключе. Что тут делает сертификат Webmoney Transfer Root Authority? Этот текст, который не закодирован в base64, кажется, только для людей, программы его игнорируют. Вот:
# openssl x509 -inform PEM -in cert.pem -noout -text
x509 – основная команда, указываем OpenSSL, что это сертификат x.509
-inform PEM – сертификат в формате pem.
-noout – по умолчанию openssl что-то сделает с сертификатом и выведет его. Нам сейчас не нужно, просим не выводить.
-text – вывести информацию о сертификате в текстовом виде, понятном людям
Получаем много информации о сертификате. Удаляем из cert.pem всё кроме base64-encoded данных (и строк BEGIN/END), выполняем ту же команду, получаем ту же информацию о сертификате.
комментариев: 11558 документов: 1036 редакций: 4118
Да, извините, я подразумевал именно английскую часть.
Вроде как. Для MS это обычная практика.
Обычно в PKCS#12 экспортируется вся иерархия доверия, дабы при импорте не было проблем с отсутствиющими сертефикатами корневых и промежуточных удостоверяющих центров. Выше Вы писали:
Один кодированный блок — это корневой сертификат УЦ, второй блок — Ваш открытый ключ, третий — Ваш закрытый ключ.
Да, это просто комментарий, напоминание о содержимом файла.
Интересная штука. Действительно, если импортировать такой сертификат в Firefox, то в Authorities появится корневой сертификат Webmoney (без каких-то вопросов/подтверждений). Но там есть несколько опций: доверять сертификату при идентификации сайтов, отправителей электронных писем, авторов софта. И по умолчанию все три выключены, соотвественно, когда заходишь на сайт, Firefox сообщает, что сайту нельзя доверять, так как нету доверия издателю сертификата, который выше в иерархии доверия. И, соответственно, толку от того, что в файле содержатся сертификаты промежуточных сертифицирующих центров, не очень много. Кстати, а при чём здесь пользователи почты / разработчики программ? Это ведь Firefox, браузер.
При использовании openssl, оказывается, можно отказаться от экспорта промежуточных сертификатов:
# openssl pkcs12 -in cert.p12 -nodes -clcerts > cert.pem
-clcerts – экспортировать только клиентские сертификаты, не сертификаты удостоверяющих центров
Ещё есть варианты:
-cacerts – наоборот, экспортировать только сертификаты CA, не экспортировать личные сертификаты
-nocerts – не выводить сертификаты вообще
-nokeys – не печатать приватные ключи
А информация о владельце сертификата? Наверное, второй блок – не только открытый ключ, но сертификат (в котором, помимо прочего, есть и открытый ключ).
Firefox не умеет импортировать сертификаты из .pem, умеет из .p12. Создать сертификат .pem, не содержащий закрытого ключа либо сертификата пользователя можно. Но если попытаться конвертировать его в .p12, ничего не выйдет:
-export – обычно openssl pkcs12 ожидает на входе .p12, на выходе даёт .pem. С этой опцией он, наоборот, принимает .pem, возвращает .p12
Значит, PEM – более универсальный формат для хранения сертификатов и ключей, а .p12 – что-то более стандартизированное, обязательно должно включать в себя как минимум личный сертификат и соответствующий закрытый ключ. Так?
комментариев: 11558 документов: 1036 редакций: 4118
Я честно предупреждал о возможных медицинских последствиях от разборок с X.509 PKI.
Говоря об открытом ключе, я имел в виду сертификат. Разумеется, никто не передаёт открытые ключи в виде голого криптографического материала.
pkcs12 это формат хранения ключей?
Если да, тогда какое он может отношение иметь к выбору сертификата?
x509 если верно понимаю это стандарт шифрования которого придерживается любой SSL?
комментариев: 11558 документов: 1036 редакций: 4118
Да.
Никакого.
Можно сказать и так. X.509 — это формат сертификатов. Процессы шифрования/подписи он не описывает, для этого есть собственные стандарты и форматы: S/MIME, CMS, SSL. Все эти стандарты используют X.509 только в качестве формата ключей и системы криптографического доверия.