Книга: C# для профессионалов. Том II
Распространение кода с помощью сертификатов
Распространение кода с помощью сертификатов
В последнем разделе было рассмотрено, как можно применять уникальное устойчивое (строгое) имя к сборке, чтобы системный администратор мог явно предоставить сборкам полномочия, которые соответствуют этому устойчивому имени с помощью группы доступа к коду. Этот метод управления политикой системы безопасности может быть весьма эффективным, но иногда необходимо работать на более высоком уровне, где администратор политики системы безопасности предоставляет полномочия на основе издателя программного обеспечения, а не каждого отдельного программного компонента.
Чтобы предоставить информацию об издателе программного обеспечения, мы используем цифровые сертификаты и подписываем сборки, чтобы потребители программного обеспечения могли проверить идентичность издателя программного обеспечения. В коммерческой среде мы получаем сертификаты от таких компаний как Verisign или Thawte.
Преимущество покупки сертификата от внешнего поставщика перед созданием своего собственного состоит в том, что он предоставляет высокие уровни надежности в своей идентичности; поставщик действует как надежная третья сторона. Однако в целях тестирования .NET включает утилиту командной строки, которую можно использовать для создания тестового сертификата. Процесс создания сертификатов и их использование для публикации программного обеспечения является сложным, но чтобы дать представление о том, что сюда вовлечено, мы разберем пример, не вдаваясь в подробности.
Представим, что мы являемся компанией ABC Corporation, и создадим сертификат для нашего программного продукта "ABC Suite". Прежде всего необходимо создать тестовый сертификат, для чего вводим команду:
makecert -sk ABC -n "CN=ABC Corporation" abccorptest.cer
Эта команда создает тестовый сертификат с именем "ABC Corporation" и сохраняет его в файле abccorptest.cer
. Аргумент -sk
ABC создает расположение контейнера ключа, который используется криптографией с открытым ключом.
Чтобы подписать сборку с помощью сертификата, применяется утилита signcode.exe
с файлом сборки, содержащим манифест сборки. Часто простейшим способом подписать сборку является использование утилиты signcode.exe
в ее режиме мастера. Для запуска мастера введите signcode.exe
без параметров:
Если нажать кнопку Next, вам будет предложено определить, где находится файл, который надо подписать. Для сборки подписывается файл, содержащий манифест.
Если нажать кнопку Next и выбрать режим Custom в следующем окне, будет предложено определить сертификат, который должен использоваться для подписи сборки. Нажав Select from File и указав файл abccorptest.cer
, увидите экран подтверждения:
Появится окно, которое запросит файл с закрытым ключом. Этот файл с ключом был создан утилитой makecert
, поэтому мы можем выбрать параметры, как показано на следующем снимке экрана. Поставщик криптографической службы является приложением, которое реализует криптографические стандарты. Криптография с открытым ключом была рассмотрена в главе 10.
Затем задается ряд вопросов о способе выполнения подписи, включая это окно, которое просит определить алгоритм шифрования:
После этого мы определяем имя приложения и URL страницы Web, которая дает о нем дополнительную информацию.
Это по сути окончание процесса, последнее окно подтверждает данные сертификата и тот факт, что сборка была успешно подписана.
Поскольку наш исполняемый файл теперь подписан с помощью сертификата, получатель сборки имеет доступ к надежному свидетельству того, кто опубликовал программное обеспечение. Среда выполнения может проверить сертификат и сопоставить издателя сборки с группой кода с высоким уровнем доверия в отношении идентичности кода, так как надежная третья сторона подтверждает идентичность издателя.
Разберем подписанную сборку более подробно. Хотя мы используем тестовый сертификат, можно временно сконфигурировать .NET для использования тестовых сертификатов как вызывающих доверие, выпущенных надежной третьей стороной, используя утилиту setreg.exe
, которая позволяет преобразовать открытый ключ и настройки сертификата в реестре. Если ввести следующую команду, машина будет сконфигурирована таким образом, чтобы доверять тестовому сертификату в корне, что дает нам более содержательную тестовую среду.
setreg.exe 1 true
Проверим нашу сборку и ее уровень надежности с помощью утилиты chktrust.exe
:
chktrust.exe securityapp11.exe
Эта команда выведет окно:
Отметим, что chktrust.exe
успешно подтвердила достоверность издателя программного обеспечения, используя сертификат, но напоминает, что, хотя сертификат был проверен, он является тестовым сертификатом.
Обратим теперь наше внимание к машине, которую мы хотим сконфигурировать для надежного программного обеспечения ABC Corporation. Для этого можно создать новую группу доступа к коду, которая соответствует программному обеспечению ABC Corporation. Итак, мы извлекаем шестнадцатеричное представление сертификата из сборки с помощью утилиты secutil.exe
:
secutil.exe -hex -х securityapp11.exe
Эта команда выведет что-то подобное:
Microsoft (R) .NET Framework SecUtil 1.0.xxxx.x
Copyright (c) Microsoft Corp 1999-2001. All rights reserved.
X.509 Certificate =
0x3082017B30820125A0030201020210D69BE8D88D8FF9B54A9C689A71BB7E33300D06092A864886F7
0001010405003016311430120603550403130B526F6F74204167656E6379301E170D30313035323831
38333133305A170D3339313233313233353935395A301A311830160603550403130F41424320436F72
706F726174696F6E305C300D06092A864886F70D0101010500034B003048024100ECBEFB348C1364B0
A3AE14FA9805F893AD180C7B2E57ADABBBE7EF94694A1E92BC5B4B59EF76FBDAC8D04D3DF2140B7616
550FE2D5AE5F15E03CBB54932F5CBB0203010001A34B304930470603551D010440303E801012E4092D
061D1D4F008D6121DC166463A1183016311430120603550403130B526F6F74204167656E6379821006
376C00AA00648A11CFB8D4AA5C35F4300D06092A864886F70D010104050003410011D1B5F6FBB0C4C0E
85A9BB5FDA5FEC1B8D9C229BB0FBBA7CBE3340A527A5B25EAA2A70205DD71571607291272DA581981C
73028AB849FF273465FAEF2F4C7174
Success
Создадим новую группу кода и применим полномочие FullTrust
к сборкам, опубликованным ABC Corporation, с помощью следующей команды (достаточно длинной):
caspol -addgroup 1. -pub -hex
3082017B30820125A0030201020210D69BE8D88D8FF9B54A9C689A71BB7E33300D06092A864886F70D
01010405003016311430120603550403130B526F6F742041678656E6379301E170D3031303532383138
333133305A170D3339313233313233353935395A301A311830160603550403130F41424320436F7270
6F726174696F6E305C300D06092A864886F70D0101010500034B003048024100ECBEFB348C1364BOA3
AE14FA9805F893AD180C7B2E57ADABBBE7EF94694A1E92BC5B4B59EF76FBDAC8D04D3DF2140B761655
0FE2D5AE5F15E03CBB54932F5CBB0203010001A34B304930470603551D010440303E801012E4092D06
1D1D4F008D6121DC166463A1183016311430120603550403130B526F6F74204167656E637982100637
6C00AA00648A11CFB8D4AA5C35F4300D06092A86
4886F70D01010405000341001D1B5F6FBB0C4C0E85A9BB5FDA5FEC1B8D9C229BB0FB8A7CBE3340A527
A5B25EAA2A70205DD71571607291272D5A81981C73028AB849FF273465FAEF2F4C7174 FullTrust
Параметры определяют, что группа кода должна добавляться к верхнему уровню (1.), условие членства в группе кода имеет тип Publisher
, а последний параметр определяет множество полномочий для предоставления (FullTrust
). Команда будет требовать подтверждения:
Microsoft (R) .NET Framework CasPol 1.0.xxxx.x
Copyright (c) Microsoft Corp 1999-2001. All rights reserved.
The operation you are performing will alter security policy.
Are you sure you want to perform this operations? (yes/no) у
Added union code group with "-pub" membership condition to the Machine level.
Success
Машина теперь сконфигурирована при наличии полного доверия всем сборкам, которые были подписаны с помощью сертификата ABC Corporation. Чтобы подтвердить это, выполним команду caspol.exe -lg
, которая выводит новую группу доступа к коду (1.8):
Security is ON
Execution checking is ON
Policy change prompt is ON
Level = Machine
Code Groups:
1. All code: Nothing
1.1. Zone - MyComputer: Full Trust
1.1.1. Zone — Intranet: LocalIntranet
1.2.1. All code: Same site Socket and Web.
1.2.2. All code: Same directory FileIO - Read, PathDiscovery
1.3. Zone — Internet: Internet
1.3.1. All code: Same site Socket and Web.
1.4. Zone — Untrusted: Nothing
1.5. Zone — Trusted: Internet
1.5.1. All code: Same site Socket and Web.
1.6. StrongName - 0024000004800000940000000602000000240000525341310004000001
000190007DlFA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5
DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8
F1645C4C0C93C1AB99285D622CAA652C1FAD63D745D6F2DF5F17E5EAF0FC4963D261C8A1143651820
6DC093344D5AD293: FullTrust
1.7. StrongName - 0000000000000000040000000000000: FullTrust
1.8. Publisher -
3048024100ECBEFB348C1364B0A3AE14FA9805F893AD180C7B2E57ADABBBE7EF94694A1E92BC5B4B59
EF76FBDAC8D04D3DF2140B7616550FE2D5AE5F1 5E03CBB54932F5CBB0203010001: FullTrust
Success
В качестве еще одной проверки попросим caspol.exe
сообщить, какие группы кода соответствуют нашей сборке:
caspol.exe -resolvegroup securityapp11.exe
Level = Enterprise
Code Groups:
1. All code: FullTrust
Level = Machine
Code Groups:
1. All code: Nothing
1.1. Zone — Intranet: LocalIntranet
1.1.1. All code: Same site Socket and Web.
1.1.2. All code: Same directory FileIO — Read, PathDiscovery
1.2. Publisher - 3048024100ECBEFB348C1364B0A3AE14FA9805F893AD180C7B2E57ADABB
BE7EF94694A1E92BC5B4B59EF76FBDAC8D04D3DF2140B7616550FE2D5AE5F15E03CBB54932F5CBB0
203010001: FullTrust
Level = User
Code Groups:
1. All code: FullTrust
Success
Результаты работы утилиты показывают, что сборка получает множество полномочий FullTrust
при соответствии новой группе кода.
- Конфигурационный файл системы безопасности
- Управление группами кода и полномочиями
- Включение и выключение системы безопасности
- Восстановление политики системы безопасности
- Создание группы кода
- Удаление группы кода
- Изменение полномочий группы кода
- Создание и применение множеств полномочий
- Распространение кода с помощью строгого имени
- Распространение кода с помощью сертификатов
- Управление зонами
- Восстановление политики системы безопасности
- Распространение сертификатов
- Управление группами кода и полномочиями
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- Глава 5 Агрессивные формы кода и борьба с ними
- Стиль написания исходного кода
- Классы сертификатов
- Обработка запросов с помощью PHP
- Анализ CIL-кода
- Как с помощью компьютера подшутить над друзьями и коллегами?