Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
The Bat и Outlook 2007, особенности просмотра подписанных сообщений.
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2015(UTC) Сообщений: 11 Откуда: Москва
|
Здравствуйте!
Создаю сообщение использую код из примеров. Подписываю Body и добавляю его через AlternateView как smime.p7m. Отдельно добавляю вложение через AlternateView, например test.txt.
В The Bat сообщение подписано (иконка в интерфейсе), в Outlook просто письмо с вложением (иконки подписи нет). При этом если вложение не добавлять, в Outlook отображается подписанное письмо.
Кто-нибудь сталкивался с подобным, в чем особенность почтовых клиентов?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,358 Сказал «Спасибо»: 550 раз Поблагодарили: 2217 раз в 1731 постах
|
Автор: alanko Здравствуйте!
Создаю сообщение использую код из примеров. Подписываю Body и добавляю его через AlternateView как smime.p7m. Отдельно добавляю вложение через AlternateView, например test.txt.
В The Bat сообщение подписано (иконка в интерфейсе), в Outlook просто письмо с вложением (иконки подписи нет). При этом если вложение не добавлять, в Outlook отображается подписанное письмо.
Кто-нибудь сталкивался с подобным, в чем особенность почтовых клиентов? А зачем добавлять test.txt, если есть smime.p7m? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2015(UTC) Сообщений: 11 Откуда: Москва
|
Что бы добавить в письмо вложение. Так понимаю вы указываете на то, что вложение должно быть внутри smime.p7m?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,358 Сказал «Спасибо»: 550 раз Поблагодарили: 2217 раз в 1731 постах
|
Автор: alanko Что бы добавить в письмо вложение. Так понимаю вы указываете на то, что вложение должно быть внутри smime.p7m? Да. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2015(UTC) Сообщений: 11 Откуда: Москва
|
С предыдущим вопросом разобрался, как программу закончу могу выложить решение. Сейчас новая вводная, сделать так, что бы письма отображались и в почтовом клиенте с проверкой подписи, и в веб браузере с просмотром текста и вложения письма. Кто-нибудь нашел решение - как (есть особенность с кодировкой?) и что подписывать? Формирую письмо с подписью в outlook, все замечательно - в bat письмо читается и подпись проверяется, в браузере письмо читается. Формирую письмо через свою программу - в браузере письмо читается, в клиенте читается, но подпись - недостоверна. Исходник Код:using System;
using System.IO;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Security.Cryptography;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.Text;
namespace SignMail
{
class Program
{
static void Main(string[] args)
{
//Проверка корректности переданных параметров
if (args.Length == 0)
{
Console.WriteLine(
"Mail.SignMessage <server> <smtpport> <login> <password> <from> <to> <subject> <mailbody> <file_attach>");
return;
}
//РАЗБЕРЕМ ПЕРЕДАННЫЕ ПАРАМЕТРЫ
// Адрес SMTP сервера
string smtpserver = args[0];
// порт подключения
int smtpport = int.Parse(args[1]);
// логин для авторизации
string login = args[2];
// пароль для авторизация
string pass = args[3];
// адрес отправителя
string from = args[4];
// адрес получателя
string to = args[5];
// текст темы
string mailsubject = args[6];
// текст сообщения
string mailbody = args[7];
string attachFile = args[8];
// подстрока поиска собственного сертификата -
// считаем, что строка отправителя содержится в
// Subject сертификата.
string signercertdn = args[4];
// Проверям существует ли файл
if (!File.Exists(attachFile))
{
Console.WriteLine("File not found.");
return;
}
// Распарсим информацию о файле вложения
FileInfo fname = new FileInfo(attachFile);
string attachname = fname.Name;
// декодируем файл в base64
string encoded = base64encode(attachFile);
// Ищем сертификат для подписи.
X509Store store = new X509Store(StoreLocation.LocalMachine);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
X509Certificate2Collection certColl = store.
Certificates.Find(X509FindType.FindBySubjectName,
signercertdn, false);
if (certColl.Count == 0)
{
Console.WriteLine("Certificate not found.");
return;
}
if (certColl.Count > 1)
{
Console.WriteLine("Found more than one signing certificate.");
return;
}
X509Certificate2 signercert = certColl[0];
// Создаем тело сообщения для подписи.
string strbody =
"Content-Type: multipart/mixed;boundary=\"--line888\"\r\n" +
"\r\n" +
"----line888\r\n" +
"Content-Type: text/plain;charset=\"utf-8\"\r\n" +
"Content-Transfer-Encoding: quoted-printable\r\n" +
"\r\n" +
mailbody +
"\r\n" +
"----line888\r\n" +
"Content-Type: application/octet-stream;name=\"" + attachname + "\"\r\n" +
"Content-Transfer-Encoding: base64\r\n" +
"Content-Disposition: attachment; filename=\"" + attachname + "\"\r\n" +
"\r\n" +
encoded +
"\r\n" +
"----line888--\r\n";
// Подписываем.
byte[] data = Encoding.UTF8.GetBytes(strbody);
ContentInfo content = new ContentInfo(data);
SignedCms signedCms = new SignedCms(content, true);
CmsSigner signer = new CmsSigner(
SubjectIdentifierType.IssuerAndSerialNumber,
signercert);
signedCms.ComputeSignature(signer);
byte[] signedbytes = signedCms.Encode();
string signData = Convert.ToBase64String(signedbytes, Base64FormattingOptions.InsertLineBreaks);
//Создаем тело письма для отправки
string msgbody =
"----line222\r\n" +
"Content-Type: multipart/mixed;boundary=\"--line888\"\r\n" +
"\r\n" +
"----line888\r\n" +
"Content-Type: text/plain;charset=\"utf-8\"\r\n" +
"Content-Transfer-Encoding: quoted-printable\r\n" +
"\r\n" +
mailbody +
"\r\n" +
"----line888\r\n" +
"Content-Type: application/octet-stream;name=\"" + attachname + "\"\r\n" +
"Content-Transfer-Encoding: base64\r\n" +
"Content-Disposition: attachment; filename=\"" + attachname + "\"\r\n" +
"\r\n" +
encoded +
"\r\n" +
"----line888--\r\n" +
"----line222\r\n" +
"Content-Type: application/pkcs7-signature; name=\"smime.p7s\"\r\n" +
"Content-Transfer-Encoding: base64\r\n" +
"Content-Disposition: attachment; filename=\"smime.p7s\"\r\n" +
"Content-Description: S/MIME Cryptographic Signature\r\n" +
"\r\n" +
signData +
"\r\n" +
"----line222--\r\n";
// Создаем email сообщение
MailMessage msg = new MailMessage();
msg.From = new MailAddress(from);
msg.To.Add(new MailAddress(to));
msg.Subject = mailsubject;
msg.Headers.Remove("Content-Transfer-Encoding");
// Выставляем параметры для просмотра сообщения.
ContentType mimeType = new System.Net.Mime.ContentType("multipart/signed; protocol=\"application/pkcs7-signature\"; boundary=\"--line222\"");
AlternateView av = AlternateView.CreateAlternateViewFromString(msgbody, mimeType);
av.TransferEncoding = TransferEncoding.EightBit;
msg.AlternateViews.Add(av);
// Отправляем сообщение.
SmtpClient client = new SmtpClient(smtpserver);
client.Credentials = new NetworkCredential(login, pass);
client.Port = smtpport;
client.EnableSsl = true;
try
{
Console.WriteLine("Sending mail...");
client.Send(msg);
client.Dispose();
Console.WriteLine("Mail was sent successfully!");
string[] keys = msg.Headers.AllKeys;
Console.WriteLine("Headers");
foreach (string s in keys)
{
Console.WriteLine("{0}:", s);
Console.WriteLine(" {0}", msg.Headers[s]);
}
}
catch (Exception ep)
{
Console.WriteLine("failed to send mail:");
Console.WriteLine(ep.Message);
}
}
// Функция преобразования файла в строку в base64
public static string base64encode(string filename)
{
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
byte[] filebytes = new byte[fs.Length];
fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
string encodedData = Convert.ToBase64String(filebytes, Base64FormattingOptions.InsertLineBreaks);
return encodedData;
}
}
}
Буду рад любым мыслям.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,395 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 718 раз в 622 постах
|
Сертификат в подпись включается? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2015(UTC) Сообщений: 11 Откуда: Москва
|
Про сертификат не могу сказать, подпись реализована кодом из примера .net SDK. И к подписи претензий особых нет, если делать вариант только для outlook, сообщение отображается корректно и подпись проверяется. Так понимаю проблема в хеше, вопрос от чего считает хеш outlook (да и the bat тоже).
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,395 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 718 раз в 622 постах
|
Отличный код, а можно мы его добавим в наш SDK? Посмотрите, что написано в свойствах сертификата в outlook. С первым попавшимся сертификатом у меня было так: Untitled.png (19kb) загружен 112 раз(а).Взял сертификат с назначением ключа Secure Email (1.3.6.1.5.5.7.3.4) - проверилось хорошо. Отредактировано пользователем 2 июля 2015 г. 19:46:20(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 10.06.2015(UTC) Сообщений: 11 Откуда: Москва
|
По поводу кода уточню у заказчика, думаю проблем возникнуть не должно, напишу позже здесь или можете написать в личку.
Я думаю недостаточно точно сформулировал вопрос. Отправляя письмо вы можете его просмотреть и в отулук (с проверкой подписи) и в веб браузере (без проверки подписи)?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,395 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 718 раз в 622 постах
|
В outlook всё хорошо. В браузере - не смотрел. В каком? OWA? |
|
|
|
|
Форум КриптоПро
»
Средства криптографической защиты информации
»
КриптоПро .NET
»
The Bat и Outlook 2007, особенности просмотра подписанных сообщений.
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close