Расшифровать / извлечь содержимое файла smime.p7m (электронная почта со встроенными файлами) с помощью OpenSSL? - PullRequest
3 голосов
/ 14 января 2009

У нас есть старый процесс (VBScript), который читает общий почтовый ящик и обрабатывает определенные электронные письма в базе данных.

В новых правилах все сообщения с вложениями теперь имеют цифровую подпись.

Теперь процесс извлекает только один файл (smime.p7m). Используя средство просмотра на основе графического интерфейса, я могу видеть встроенные файлы и извлекать их без проблем. Однако, что мне действительно нужно, так это экстрактору на основе командной строки, который будет записывать встроенные файлы (PDF, DOC, XLS) - они не шифруются, а просто подписываются. Я проверил это, используя ноутбук, у которого не было сертификатов, и просто открыл файл smime.p7m с помощью вышеупомянутого средства просмотра.

Похоже, что OpenSSL расшифрует / извлечет это, и кому-то удалось получить версию, скомпилированную в Windows. Тем не менее, многие пробные и ошибочные тесты исполняемого файла были разочаровывающими, потому что я не могу найти правильную комбинацию флагов, чтобы просто сказать «откройте файл smime.p7m и запишите все найденные встроенные файлы». "openssl smime" всегда, кажется, хочет "cert.pem" после всех опций, а у меня его нет.

Чего мне не хватает? Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 08 октября 2009

Вы пробовали опцию "-noverify" в openssl?

Для сообщения с подписью вы можете использовать "openssl smime -verify -in -noverify -out / tmp / blob"

Затем вы можете использовать RFC822-подобный синтаксический анализатор, чтобы получить тело и вложения из этого «блоба». Это означает, что ваш синтаксический анализатор должен быть способен к кодировке, такой как quoted-printable и base64.

0 голосов
/ 15 января 2009

Похоже, что единственный доступный вариант - написать простую программу с использованием библиотеки Chilkat. Этот вариант стоит $ 149 или $ 289, в зависимости от того, какая лицензия для каждого разработчика, но, по крайней мере, он бесплатен.

...