Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Начиная с macOS Catalina (версия 10.15) все программное обеспечение, созданное после 1 июня 2019 года и распространяемое с идентификатором разработчика, должно быть заверено. Это требование относится к среде выполнения .NET, пакету SDK для .NET и программному обеспечению, созданному с помощью .NET. Эта статья описывает распространенные сценарии, с которыми вы можете столкнуться при использовании .NET и процессе нотаризации на macOS.
Установка .NET
Установщики для .NET (среда выполнения и пакет SDK) были заверены с 18 февраля 2020 г. Более ранние версии не заверены. Вы можете вручную установить не нотарифицированную версию .NET, сначала скачав установщик, а затем использовав команду sudo installer с скачанным установщиком.
Нативный appHost
Когда ваше приложение компилируется, создается appHost, который является собственным исполняемым файлом Mach-O. Этот исполняемый файл обычно вызывается .NET, когда ваш проект компилируется, публикуется или выполняется с командой dotnet run. Версия приложения, отличной от appHost, — это dll-файл, который может вызываться командойdotnet <app.dll>.
При локальном запуске пакет SDK подписывает apphost с помощью нерегламентированного подписывания, что позволяет приложению выполняться локально. При распространении приложения вам потребуется правильно подписать приложение в соответствии с рекомендациями Apple.
Вы также можете распространять приложение без использования apphost и полагаться на пользователей для запуска вашего приложения с помощью dotnet. Чтобы отключить создание appHost , добавьте UseAppHost логическое значение параметра в файл проекта и задайте для него значение false. Кроме того, можно переключить использование appHost с помощью параметра -p:UseAppHost в командной строке для определенной команды dotnet:
Файл проекта
<PropertyGroup> <UseAppHost>false</UseAppHost> </PropertyGroup>Параметр командной строки
dotnet run -p:UseAppHost=false
Требуется appHost при публикации приложения в автономном режиме, и его нельзя отключить.
Дополнительные сведения о параметре 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 имеют подтверждённый хост по умолчанию. Сертификаты импортируются в защищенный раздел на основании его идентификатора. Эти сертификаты недоступны из сгенерированного appHost, так как 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-jitcom.apple.security.cs.allow-unsigned-executable-memorycom.apple.security.cs.allow-dyld-environment-variablescom.apple.security.cs.disable-library-validation
Заверение приложения .NET
Если вы хотите, чтобы приложение выполнялось в macOS Catalina (версия 10.15) или более поздней версии, рекомендуется заверить его. Файл appHost, отправляемый вместе с приложением для заверения, должен использоваться по крайней мере с теми же правами по умолчанию для .NET Core.