Заверение macOS Catalina и влияние на скачиваемые файлы и проекты .NET
Начиная с macOS Catalina (версия 10.15) все программное обеспечение, созданное после 1 июня 2019 года и распространяемое с идентификатором разработчика, должно быть заверено. Это требование относится к среде выполнения .NET, пакету SDK для .NET и программному обеспечению, созданному с помощью .NET. Эта статья описывает распространенные сценарии, с которыми вы можете столкнуться при заверении .NET и macOS.
Установка .NET
Установщики для .NET (среда выполнения и пакет SDK) были заверены с 18 февраля 2020 г. Более ранние версии не заверены. Вы можете вручную установить неустраченную версию .NET, скачав установщик, а затем с помощью sudo installer
команды с скачанным установщиком.
Собственный appHost
В пакете SDK для .NET 7 и более поздних версий для приложения создается собственный исполняемый файл Mach-O. Этот исполняемый файл обычно вызывается .NET, когда проект компилирует, публикует или выполняется с dotnet run
помощью команды. Версия приложения, отличной от appHost, — это dll-файл, который может вызываться командойdotnet <app.dll>
.
При локальном запуске пакет SDK подписывает apphost с помощью нерегламентированного подписывания, что позволяет приложению выполняться локально. При распространении приложения вам потребуется правильно подписать приложение в соответствии с рекомендациями Apple.
Вы также можете распространять приложение без приложения и полагаться на пользователей для запуска приложения с помощью dotnet
. Чтобы отключить создание appHost , добавьте UseAppHost
логическое значение параметра в файл проекта и задайте для него значение false
. Кроме того, можно переключить использование appHost с помощью параметра -p:UseAppHost
в командной строке для определенной команды dotnet
:
Файл проекта
<PropertyGroup> <UseAppHost>false</UseAppHost> </PropertyGroup>
Параметр командной строки
dotnet run -p:UseAppHost=false
ПриложениеHost требуется при публикации автономного приложения, и его невозможно отключить.
Дополнительные сведения о параметре UseAppHost
см. в разделе Свойства MSBuild для Microsoft.NET.Sdk.
Контекст appHost
Когда appHost включен в проекте и вы используете команду dotnet run
для запуска приложения, оно вызывается в контексте appHost, а не узла по умолчанию (узлом по умолчанию является команда dotnet
). Если appHost отключен в проекте, команда dotnet run
запускает приложение в контексте узла по умолчанию. Даже если appHost отключен, публикация приложения в качестве автономного приводит к созданию исполняемого файла appHost, который применяется пользователями для запуска приложения. При запуске приложения с помощью dotnet <filename.dll>
оно вызывается на узле по умолчанию — в общей среде выполнения.
При вызове приложения, использующего appHost, раздел сертификата, к которому обращается приложение, отличается от заверенного узла по умолчанию. Если приложение должно обращаться к сертификатам, установленным через узел по умолчанию, используйте команду dotnet run
для запуска приложения из файла проекта или команду dotnet <filename.dll>
для запуска приложения напрямую.
Дополнительные сведения об этом сценарии см. в разделе ASP.NET Core, macOS и сертификаты.
ASP.NET Core, macOS и сертификаты
.NET позволяет управлять сертификатами в цепочке ключей macOS с помощью класса System.Security.Cryptography.X509Certificates. В рамках обращения к цепочке ключей macOS удостоверение приложения используется в качестве первичного ключа при принятии решения о том, какой раздел следует рассматривать. Например, неподписанные приложения хранят секреты в неподписанном разделе, а подписанные приложения хранят свои секреты в разделах, доступ к которым есть только у них. Источник выполнения, вызывающий ваше приложение, решает, какой раздел следует использовать.
.NET предоставляет три источника выполнения: appHost, узел по умолчанию (команда dotnet
) и пользовательский узел. Каждая модель выполнения может использовать разные удостоверения, подписанные или нет, а также имеет доступ к разным разделам в цепочке ключей. Сертификаты, импортированные в одном режиме, могут быть недоступны в другом. Например, заверенные версии .NET имеют подписанный узел по умолчанию. Сертификаты импортируются в защищенный раздел на основе его удостоверения. Эти сертификаты недоступны из созданного приложенияHost, так как appHost подписан нерегламентированным.
Другой пример: по умолчанию ASP.NET Core импортирует SSL-сертификат по умолчанию через узел по умолчанию. Приложения ASP.NET Core, использующие appHost, не будут иметь доступ к этому сертификату и получат сообщение об ошибке, когда .NET обнаружит, что сертификат недоступен. Это сообщение об ошибке содержит инструкции по устранению данной проблемы.
Если требуется общий доступ к сертификату, macOS предоставляет параметры конфигурации с помощью служебной программы security
.
Дополнительные сведения об устранении неполадок, связанных с сертификатами ASP.NET Core, см. в разделе Применение протокола HTTPS в ASP.NET Core.
Права по умолчанию
Узел по умолчанию .NET (команда dotnet
) имеет набор прав по умолчанию. Эти права необходимы для правильной работы .NET. Приложению могут понадобиться дополнительные права. В этом случае потребуется создать и использовать appHost, а затем добавить необходимые права локально.
Набор прав по умолчанию для .NET:
com.apple.security.cs.allow-jit
com.apple.security.cs.allow-unsigned-executable-memory
com.apple.security.cs.allow-dyld-environment-variables
com.apple.security.cs.disable-library-validation
Заверение приложения .NET
Если вы хотите, чтобы приложение выполнялось в macOS Catalina (версия 10.15) или более поздней версии, рекомендуется заверить его. Файл appHost, отправляемый вместе с приложением для заверения, должен использоваться по крайней мере с теми же правами по умолчанию для .NET Core.