как использовать сертификаты X509 (подписать файл с простой проверкой, + другие вопросы) - PullRequest
2 голосов
/ 12 декабря 2008

Вчера я потратил несколько часов, пытаясь подписать короткий файл цифровой подписью, используя сертификат X509 (один из сертификатов "freemail" от thawte). Наконец-то я получил openssl, чтобы подписать его как сообщение SMIME, но я не могу его успешно проверить, и это в формате SMIME - у меня нет доступа к программе «sendmail», которая фактически может отправлять файл SMIME.

Я просто хочу создать какой-нибудь файл, который будет «исключительным» с помощью простого вырезания и вставки, например:

===BEGIN SIGNED DOCUMENT===
===BEGIN DOCUMENT===
blah blah blah this is the plaintext ...
===END DOCUMENT===
===BEGIN SIGNATURE===
AFab12121abadAF ...
===END SIGNATURE===
===END SIGNED DOCUMENT===

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

поэтому я предполагаю, что мои требования:

  1. исходный текст = произвольный файл
  2. знак входа = из сертификата X509
  3. output = что-то, что я могу легко отправить кому-то по электронной почте, вырезав и вставив или прикрепив один файл .zip
  4. программа = бесплатная программа с открытым исходным кодом, например openssl или gpg
  5. программа! = Волшебный графический интерфейс, где я не понимаю, что происходит
  6. возможность легко использовать программу для генерации вывода из входных данных
  7. способность легко извлекать открытый текст из выходных данных (например, непосредственно на глаз или в качестве компонента .zip-файла)
  8. возможность проверить, что открытый текст был подписан получателем сертификата X509 (т.е. мной) и что лицо, предоставляющее сертификат (CA), является известным центром сертификации ... при условии, что я - рациональный человек, который хранит сертификат защищен от использования другими сторонами (в противном случае кто-то может подписать что-либо как я).

Есть ли хорошее руководство по сертификатам X509 и как они используются на практике для этого? У меня есть 2-е издание «Прикладной криптографии» Шнайера, и у меня достаточно опыта работы с криптографическими алгоритмами + протоколами, но я совсем немного знаю о X509, и я действительно не понимаю, что такое сертификат на практике. , (Другими словами, «сертификат - это криптографическое утверждение выдавшей стороны СА о том, что сторона X, указанная в сертификате, является идентификатором, известным СА?» И «сертификат разрешает своему носителю _____»)

Когда я его получаю, он появляется на вкладке «Ваши сертификаты» Firefox в Диспетчере сертификатов, и я могу экспортировать его и прочитать его с помощью openssl, но я хочу убедиться, что он не хранится каким-либо образом, который кто-то другой может используйте его без знания сертификата. ключевая фраза - и я действительно запутался, потому что кажется, что некоторые сертификаты имеют только открытый ключ, а другие имеют зашифрованные закрытые ключи.

Есть ли хорошая, простая оболочка GUI вокруг openssl, которая позволяет вам объяснить, что он делает?


edit: thawte не позволяет напрямую использовать запросы на сертификаты; вместо этого он общается с веб-браузерами (я использую Firefox), которые генерируют закрытый ключ и обрабатывают все протоколы сертификатов. Поэтому я могу экспортировать это как файл PKCS12, но не совсем уверен, как его использовать.

Ответы [ 2 ]

2 голосов
/ 17 декабря 2008

Так что я могу экспортировать это как файл PKCS12, но не совсем уверен, как его использовать.

Если вы используете инструмент openssl, вы можете использовать команду

openssl pkcs12 -in file.p12 -out file.pem

чтобы конвертировать его в pem-формат.

EDIT :

У меня проблемы с выяснением того, что PEM и PKCS12 и все эти вещи отличаются друг от друга

Файл PKCS # 12 - это просто контейнер для сертификатов и ключей. Если вы хотите увидеть, что он содержит (по крайней мере, за исключением зашифрованных частей), вы можете использовать инструмент, такой как dumpasn1 . Файл PKCS # 12, который вы экспортируете из своего браузера, будет содержать ваш закрытый ключ в зашифрованном формате, ваш сертификат, а также сертификаты CA, которые необходимы для формирования цепочки до доверенного CA.

Аналогично, файл PEM может содержать сертификаты и ключи. В файле PEM сертификаты и ключи кодируются в base64 и помещаются в некоторые текстовые разделители (файл PKCS # 12 использует двоичную кодировку с именем ASN.1 для структурирования файла - вы можете думать об ASN.1 как двоичной форме XML. Большинство криптографических структур, с которыми вы столкнетесь, будут закодированы с использованием ASN.1). За исключением этого, единственное реальное различие между форматами состоит в том, что PKCS # 12 содержит проверку целостности - в противном случае форматы эквивалентны.

OpenSSL лучше всего работает с PEM, в то время как большинство браузеров и приложений электронной почты ожидают PKCS # 12, но вы можете свободно конвертировать между форматами.

1 голос
/ 13 декабря 2008

Для начала вам, вероятно, необходимо узнать разницу между закрытым ключом, открытым ключом и сертификатом. Сертификат - это подпись с закрытым ключом CA на утверждении «Открытый ключ XX принадлежит лицу YY». Если вы подписываете что-то с помощью своего закрытого ключа, подпись может быть подтверждена вашим открытым ключом, и третье лицо, которое доверяет ЦС, может прийти к заключению, что подпись была подписана вами.

Если вы сгенерируете сообщение S / MIME и прикрепите его в виде файла с расширением .p7s, большинство почтовых программ, вероятно, смогут его проверить.

Если вам нужен полный контроль над тем, что вы делаете, мой опыт показывает, что инструментальные средства в формате PGP дают вам лучший контроль (по сравнению с почтовыми программами, реализующими протокол S / MIME).

...