как использовать сертификаты X509 (подписать файл с простой проверкой, + другие вопросы)

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

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

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

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


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

12.12.2008 14:45:52
2 ОТВЕТА

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

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

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

1
17.12.2008 05:43:41

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

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

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

преобразовать его в pem-формат.

РЕДАКТИРОВАТЬ :

У меня проблемы с выяснением того, что 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, но вы можете свободно конвертировать между форматами.

2
17.12.2008 05:43:11
Я понял это, но мне трудно понять, что PEM и PKCS12 и все эти вещи отличаются друг от друга. Это все равно, что соединять сантехнику в петельные круги и узлы. Я могу понять, как сделать отдельные связи, но общая картина сбивает с толку.
Jason S 16.12.2008 23:54:05