Проверьте, если электронная почта подписана с помощью VB.Net - PullRequest
0 голосов
/ 01 ноября 2018

Я хотел бы знать, возможно ли с помощью VB.Net проверить, имеет ли электронная почта цифровую подпись и кто является эмитентом сертификата.

Используя расширенную оболочку MAPI и криптографию, я смог получить вложение smime.p7m из электронного письма и получить из него информацию о сертификате (включая издателя), поэтому казалось, что все работает. Проблема заключается в том, что если я отправлю неподписанное электронное письмо и вручную прикреплю файл smime.p7m, он обманом заставит код думать, что электронное письмо подписано.

У кого-нибудь есть решение для этого? Я также могу использовать другие методы, такие как Outlook Interop.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Если у вас действительно подписанное сообщение S / MIME, то вложение smime.p7m будет иметь либо значение Content-Type, равное application/pkcs7-mime; smime-type=signed-data, либо значение Content-Type, равное application/pkcs7-signature, и будет второй дочерней частью MIME контейнера multipart/signed.

Для визуализации:

Вариант 1:

Content-Type: application/pkcs7-mime; smime-type="signed-data"; name="smime.p7m"
Content-Disposition: attachment; filename="smime.p7m"
Content-Transfer-Encoding: base64

Вариант 2:

Content-Type: multipart/signed; boundary="some-bounary-string"; protocol="application/pkcs7-signature"

--some-boundary-string
Content-Type: text/plain

This is the message content that was signed...

--some-boundary-string
Content-Type: application/pkcs7-signature; name="smime.p7m"
Content-Disposition: attachment; filename="smime.p7m"
Content-Transfer-Encoding: base64

...
--some-boundary-string--

Я не знаком с API-оболочкой Exchange MAPI, но должен быть способ получить значение Content-Type. В зависимости от того, что это, вы можете проверить другие атрибуты, которые я упомянул выше, чтобы убедиться, что это действительно подписанное сообщение или просто вложение.

Примечание: они также могут быть application/x-pkcs7-mime и application/x-pkcs7-signature, но кроме начального x- подтипа MIME логика та же.

0 голосов
/ 01 ноября 2018

Модель объектов Outlook всегда пытается представить подписанные и зашифрованные сообщения как обычные MailItem объекты. Свойство MessageClass будет возвращать "IPM.Note". Это так же далеко, как возвращение поддельного объекта IMessage из свойства MailItem.MAPIOBJECT.

Если вы используете Extended MAPI, вы можете прочитать свойство PR_MESSAGE_CLASS и проверить, соответствует ли его значение одному из классов подписанных / зашифрованных сообщений (например, "IPM.Note.SMIME.MultipartSigned"). Обязательно распакуйте объект IMessage, если вы извлекаете его из свойства MailItem.MAPIOBJECT.

Вы также можете использовать Погашение и его объект RDOEncryptedMessage - он позволяет расшифровать зашифрованное сообщение с помощью сообщения RDOEncryptedMessage.GetDecryptedMessage, а также получить доступ к свойствам сертификата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...