Сегодня мой коллега, Константин Семечкин, поделился очень интересной проблемой, с которой столкнулся один из его пользователей. Суть проблемы сводится к тому, что когда пользователь «Ж» отправляет шифрованное письмо пользователю «Н». Пользователь «Н» успешно открывает шифрованное письмо, и пишет ответ. Пользователь «Ж» получает письмо, но не может его прочитать. Outlook выдает сообщение об ошибке «не удается открыть элемент. системе безопасности не удается найти цифровое удостоверение».
В ходе дальнейшего разбирательства стало ясно, что пользователь «Ж» использует Outlook и работает в операционной системе Windows XP, а пользователь «Н» использует Outlook Web Access и работает в операционной системе Windows 7. Поначалу нам показалось, что эта информация не имеет отношение к проблеме, но тест показал, что если пользователю «Ж» отправить шифрованное сообщение из операционной системы Windows XP, при этом используя Outlook или OWA, то сообщение читается. А если отправить через операционную систему Windows 7, при этом используя OWA, то не читается. А если отправить из Windows 7 через Outlook, то читается.
В результате теста мы поняли, что проблема проявляет себя только в том случае, если из операционной системы Windows 7 отправляется шифрованное письмо через OWA, то оно не может быть прочитано из операционной системы Windows XP.
Из долгих бесед со своими коллегами, Сашей Станкевичем (MVP Security) и Вадимом Подансом (MVP PowerShell), я узнал много интересного о том, как на самом деле Outlook шифрует сообщение. Эти знания помогли мне, и Константину, провести диагностику проблемы.
Прежде чем приступать к диагностике, необходимо четко понимать алгоритм, который используется для шифрации письма. Что происходит, когда пользователь хочет отправить зашифрованное сообщение?
0. Пользователь А отправляет шифрованное эл. сообщение пользователю Б используя Outlook Web Access (OWA).
1. Создается ключ симметричного алгоритма шифрования, которым шифруется сообщение.
Ассиметричное шифрование очень медленное, поэтому большие объемы быстрее зашифровать симметричным ключом и передать ключ вместе с сообщением, предварительно зашифровав сам симметричный ключ. А вот симметричный ключ уже шифруется ассиметричным ключом. В честности публичным ключом получателя сообщения.
2. Публичный ключ получателя запрашивается в Active Directory.
Где взять публичный ключ получателя? В случае, когда отправитель и получатель находятся в одной организации, публичный ключ получателя запрашивается в Active Directory. Более подробную информацию, о том как происходит поиск и выбор публичного ключа, можно прочитать в этой статье Outlook S/MIME certificate selection (http://blogs.technet.com/b/pki/archive/2008/12/17/outlook-s-mime-certificate-selection.aspx) Если получатели находятся в разных организациях, то публичный ключ должен быть каким либо образом передан отправителю прежде чем он будет писать письмо.
3. Симметричный ключ шифруется публичным ключом получателя.
Кроме того, что симметричный ключ шифруется публичным ключом получателя он так же шифруется и публичным ключом отправителя, чтобы отправитель мог просматривать шифрованные письма в паке “Отправленные”.
4. Письмо отправляется получателю.
5. Получатель расшифровывает своим закрытым ключом симметричный ключ
6. При помощи симметричного ключа расшифровывается сообщение
И так у нас два подозреваемых. Либо проблема с закрытым ключом получателя, либо с симметричным ключом, которым зашифровано сообщение. Первый подозреваемый – закрытый ключ – имеет надежное алиби. Он многократно замечен в расшифровки других писем, которые были отправлены либо с Windows 7 через Outlook либо с Windows XP как через Outlook так через OWA.Таким образом, круг подозреваемых, сужается до одного симметричного ключа.
Что не так с симметричным ключом? Почему проблема возникает только при отправке через OWA и не возникает при отправке через Outlook? И почему только Windows 7? На эти вопросы нам с Константином только предстояло найти ответы.
Для начала мы задались вопросом – кто генерирует симметричный ключ, и какой алгоритм при этом используется? К сожалению четкого ответа на вопрос найти пока не удалось, но логика подсказывает, что когда сообщение отправляется через Outlook то именно Outlook генерирует симметричный ключ. В настройках Outlook так же можно выбрать алгоритм симметричного шифрования. А если используется OWA, то симметричный ключ генерирует либо сама Windows либо компонент S/MIME (Secure/Multipurpose Internet Mail Extensions), который, помимо прочего, и позволяет осуществлять шифрование писем в OWA. Мы предположили, что для генерации симметричного ключа Windows 7 или компонент S/MIME, использует алгоритм шифрования, который не поддерживает Windows XP.
Тогда возникает следующий вопрос. Как управлять процессом генерации симметричного ключа в случае использования OWA?
Ответа на этот вопрос дает статья «Управление S/MIME в Outlook Web Access», которую нашел Константин. Так же статья подтверждает наше предположение о том, что в Windows XP и Windows 7 используются различные и не совместимые алгоритмы генерации симметричных ключей.
Но давайте обо всем по порядку.
Для управления алгоритмом симметричного шифрования используется ключ реестра «EncryptionAlgorithms», который находится на Client Access Server (CAS) в подразделе «HKLM\System\CurrentControlSet\Services\MSExchange OWA\SMIME». В свойствах данного ключа можно задать порядок алгоритмов, который будет использовать OWA. По умолчанию данного ключа нет. В статье сказано:
При наличии ключа реестра всегда будут использоваться алгоритмы, указанные в ключе. Если ключа нет, Outlook Web App вернется к внутреннему списку по умолчанию. Список начинается с AES256 для компьютеров, на которых установлен Windows Vista, и с 3DES для компьютеров, на которых установлен Microsoft Windows XP.
Это подтверждает наше первое предположение о том, что в разных ОС используются разные алгоритмы шифрования. Далее в статье написано:
AES алгоритмы используются только в случае, если их поддерживает компьютер пользователя. AES не поддерживается в Windows XP, а сообщения, зашифрованные с использованием AES, не могут быть прочитаны на компьютерах с установленным Windows XP.
Что подтверждает наше второе предположение о том, что всему виной Windows 7.
Изменив значение реестра, и задав порядок алгоритмов шифрования такой, который поддерживал бы и Windows 7 и Windows XP мы, таким образом, решаем возникшую проблему.
Здравсвуйте.
ОтветитьУдалитьИмеет почти такая же проблема, только клиент пишет не через ОВА, а из Аутлук 2010. Кроме того Почтовый сервер не 2007, а 2003. Подскажите, как можно исправить проблему?
День добрый, а как посмотреть и поправить процедуру на шаге №2 - в общем в компании у всех всё ок, а на одном клиенте ну никак не хочет оптравлять шифрвоание, ругатеся постоянно на сертификат открытый удаленного юзера, хотя в АД всё опубликовано. у всех всё ок, а на проблемном ПК не хочет лезть в АД и всё тут.
ОтветитьУдалитьДобрый день. В двух словах думаю мы с Вами этот вопрос не разрешим. Что значит "поправить процедуру". Это by design, как говорится. Напишите мне на support@danshin.ms - разберем ситуацию более детально.
Удалить