Notarizace catalina pro macOS a dopad na stahování a projekty .NET

Počínaje macOS Catalina (verze 10.15) musí být notarizován veškerý software vytvořený po 1. červnu 2019 a distribuovaný pomocí ID vývojáře. Tento požadavek platí pro modul runtime .NET, sadu .NET SDK a software vytvořený pomocí .NET. Tento článek popisuje běžné scénáře, se kterými se můžete setkat s notarizací .NET a macOS.

Instalace .NET

Od 18. února 2020 se instalační programy pro .NET (modul runtime i sada SDK) neschybovaly. Předchozí vydané verze nejsou notarizovány. Neověřenou verzi rozhraní .NET můžete nainstalovat ručně tak, že nejprve stáhnete instalační program a pak použijete sudo installer příkaz. Další informace najdete v tématu Stažení a ruční instalace pro macOS.

Native appHost

V .NET SDK 7 a novějších verzích se pro vaši aplikaci vytvoří appHost, což je nativní spustitelný soubor Mach-O. Tento spustitelný soubor je obvykle vyvolán rozhraním .NET při kompilaci, publikování nebo spuštění projektu pomocí dotnet run příkazu. Verze aplikace non-appHost je soubor dll, který lze vyvolat příkazemdotnet <app.dll>.

Když se spustí místně, sada SDK podepíše hostitele aplikace pomocí ad hoc podepisování, které aplikaci umožní spustit místně. Při distribuci aplikace budete muset aplikaci správně podepsat podle pokynů společnosti Apple.

Aplikaci můžete také distribuovat bez hostitele aplikace a spoléhat se na uživatele, kteří aplikaci spouštějí pomocí dotnet. Pokud chcete vypnout generování appHost , přidejte do UseAppHost souboru projektu logické nastavení a nastavte ho na false. Můžete také přepnout appHost s parametrem -p:UseAppHost na příkazovém řádku pro konkrétní dotnet příkaz, který spustíte:

  • Soubor projektu

    <PropertyGroup>
      <UseAppHost>false</UseAppHost>
    </PropertyGroup>
    
  • Parametr příkazového řádku

    dotnet run -p:UseAppHost=false
    

Když publikujete aplikaci, která je samostatná, vyžaduje se appHost a nemůžete ji zakázat.

Další informace o UseAppHost nastavení naleznete v tématu MSBuild vlastnosti pro Microsoft.NET.Sdk.

Kontext hostitele aplikace

Pokud je v projektu povolený appHost a ke spuštění aplikace použijete dotnet run příkaz, aplikace se vyvolá v kontextu appHost a ne výchozího hostitele (výchozím hostitelem dotnet je příkaz). Pokud je v projektu zakázaný appHost, dotnet run příkaz spustí aplikaci v kontextu výchozího hostitele. I když je appHost zakázaný, publikování aplikace jako samostatné vygeneruje spustitelný soubor appHost a uživatelé ho používají ke spuštění aplikace. Spuštění aplikace vyvolá dotnet <filename.dll> aplikaci s výchozím hostitelem, sdíleným modulem runtime.

Při vyvolání aplikace používající appHost se oddíl certifikátu, ke který aplikace přistupuje, liší od notarizovaného výchozího hostitele. Pokud vaše aplikace musí přistupovat k certifikátům nainstalovaným prostřednictvím výchozího hostitele, použijte dotnet run příkaz ke spuštění aplikace z jeho souboru projektu nebo pomocí dotnet <filename.dll> příkazu spusťte aplikaci přímo.

Další informace o tomto scénáři najdete v části ASP.NET Core a macOS a certifikáty .

ASP.NET Core, macOS a certifikáty

.NET umožňuje spravovat certifikáty v klíčence macOS pomocí System.Security.Cryptography.X509Certificates třídy. Přístup ke klíčence macOS používá identitu aplikací jako primární klíč při rozhodování o tom, který oddíl se má zvážit. Nepodepsané aplikace například ukládají tajné kódy do nepodepsaného oddílu, ale podepsané aplikace ukládají tajné kódy do oddílů, ke kterým mají přístup jenom. Zdroj spuštění, který vyvolá vaši aplikaci, rozhoduje, který oddíl se má použít.

.NET poskytuje tři zdroje spuštění: appHost, výchozí hostitel ( dotnet příkaz) a vlastní hostitel. Každý model spouštění může mít různé identity, podepsané nebo nepodepsané a má přístup k různým oddílům v rámci řetězce klíčů. Certifikáty importované jedním režimem nemusí být přístupné z jiného režimu. Notarizované verze rozhraní .NET mají například výchozího hostitele, který je podepsaný. Certifikáty se naimportují do zabezpečeného oddílu na základě své identity. Tyto certifikáty nejsou přístupné z vygenerovaného appHost, protože appHost je podepsaný ad hoc.

Další příklad, ve výchozím nastavení ASP.NET Core importuje výchozí certifikát SSL prostřednictvím výchozího hostitele. ASP.NET aplikace Core, které používají appHost, nebudou mít přístup k tomuto certifikátu a zobrazí se chyba, když .NET zjistí, že certifikát není přístupný. Chybová zpráva obsahuje pokyny k vyřešení tohoto problému.

Pokud se vyžaduje sdílení certifikátů, poskytuje macOS možnosti konfigurace pomocí security nástroje.

Další informace o řešení potíží s certifikátem ASP.NET Core najdete v tématu Vynucení HTTPS v ASP.NET Core.

Výchozí nároky

. Výchozí hostitel rozhraní NET (příkaz dotnet ) má sadu výchozích nároků. Tyto nároky jsou vyžadovány pro správné fungování rozhraní .NET. Je možné, že vaše aplikace může potřebovat další nároky, v takovém případě budete muset vygenerovat a používat appHost a pak přidat potřebná oprávnění místně.

Výchozí sada nároků pro .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

Notarizace aplikace .NET

Pokud chcete, aby vaše aplikace běžela v systému macOS Catalina (verze 10.15) nebo vyšší, budete chtít aplikaci notarizovat. Hostitel aplikace, který odešlete s aplikací pro notářizaci, by se měl používat s alespoň stejnými výchozími nároky pro .NET Core.

Další kroky