Безопасность и шифрование электронной почты

Шифрование/дешифрование сообщений

Aspose.Email предоставляет возможность шифровать и дешифровать электронные сообщения с использованием X509Certificates. Эта статья показывает, как существующее или новое сообщение может быть загружено и зашифровано с помощью MailMessage. Это Encrypt() и Decrypt() методы возвращают MailMessage объект для применяемых эффектов, которые необходимо учитывать при шифровании/дешифровании сообщений. Шифрование и дешифрование сообщений включает следующие шаги:

  1. Создать новое сообщение или загрузить существующее
  2. Загрузить сертификат шифрования, используя объект X509Certificate
  3. Зашифровать сообщение с использованием сертификата
  4. Отправить сообщение или сохранить его
  5. Дешифровать сообщение по необходимости

Следующий фрагмент кода показывает, как шифровать и дешифровать сообщения.

// The path to the File directory.
string dataDir = RunExamples.GetDataDir_Email();

string publicCertFile = dataDir + "MartinCertificate.cer";
string privateCertFile = dataDir + "MartinCertificate.pfx";

X509Certificate2 publicCert = new X509Certificate2(publicCertFile);
X509Certificate2 privateCert = new X509Certificate2(privateCertFile, "anothertestaccount");

// Create a message
MailMessage msg = new MailMessage("atneostthaecrcount@gmail.com", "atneostthaecrcount@gmail.com", "Test subject", "Test Body");

// Encrypt the message
MailMessage eMsg = msg.Encrypt(publicCert);
if (eMsg.IsEncrypted == true)
    Console.WriteLine("Its encrypted");
else
    Console.WriteLine("Its NOT encrypted");

// Decrypt the message
MailMessage dMsg = eMsg.Decrypt(privateCert);
if (dMsg.IsEncrypted == true)
    Console.WriteLine("Its encrypted");
else
    Console.WriteLine("Its NOT encrypted");

Проверка шифрования сообщения

Aspose.Email MailMessage класс позволяет проверить, зашифровано ли сообщение. The IsEncrypted свойство MailMessage позволяет проверить это, как показано в следующем примере кода.

MailMessage mailMessageOrig = MailMessage.Load(Path.Combine(dataDir, "Message.msg"), new MsgLoadOptions());
X509Certificate2 publicCert = new X509Certificate2(publicCertFile);
X509Certificate2 privateCert = new X509Certificate2(privateCertFile, "anothertestaccount");

Console.WriteLine("Message is encrypted: {0}" , mailMessageOrig.IsEncrypted);
MailMessage mailMessage = mailMessageOrig.Encrypt(publicCert);
Console.WriteLine("Message is encrypted: {0}", mailMessage.IsEncrypted);
mailMessage = mailMessage.Decrypt(privateCert);
Console.WriteLine("Message is encrypted: {0}", mailMessage.IsEncrypted);

Проверка подписи защищённых писем

Этот SecureEmailManager класс позволяет проверить подпись защищённых объектов MailMessage.

Этот SmimeResult класс хранит результаты проверки.

Следующие методы класса SecureEmailManager класс и пример кода позволят вам обработать подпись:

Проверьте подпись сообщения без указания сертификата:

var eml = MailMessage.Load(fileName);
var result = new SecureEmailManager().CheckSignature(eml);

Проверьте подпись зашифрованного сообщения, указав сертификат для дешифрования и хранилище, содержащие сертификаты, использованные для проверки:

var certFileName = "cert.pfx";
var cert = new X509Certificate2(certFileName, "pass");
var eml = MailMessage.Load(fileName);

var store = new X509Store();
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

var result = new SecureEmailManager().CheckSignature(eml, cert, store);

Подписать письма с помощью DKIM

Aspose.Email позволяет подписывать электронные письма с помощью DKIM (DomainKeys Identified Mail). Это позволяет организации брать на себя ответственность за сообщение в пути (Дополнительная информация). DKIM добавляет цифровую подпись к заголовкам сообщения, которую могут проверять получатели. Публичный ключ отправителя позволяет получателю убедиться, что подпись соответствует содержимому сообщения. The DKIMSign метод MailMessage класс используется для задания криптографической и подписи информации при подписании сообщения. Следующий фрагмент кода показывает, как подписывать письма с помощью DKIM.

var eml = new MailMessage("sender@gmail.com", "receiver@gmail.com", "Some subject", "Some body text");

string privateKeyFile = "key2.pem";
RSACryptoServiceProvider rsa = PemReader.GetPrivateKey(privateKeyFile);
DKIMSignatureInfo signInfo = new DKIMSignatureInfo("test", "somedomain.com");

var signedEml = eml.DKIMSign(rsa, signInfo);