A macOS Catalina hitelesítési folyamata és annak hatása a .NET letöltésekre és projektekre

A macOS Catalina (10.15-ös verzió) verziótól kezdve a 2019. június 1. után készült és fejlesztői azonosítóval elosztott összes szoftvert közjegyzővel kell elérhetővé tenni. Ez a követelmény a .NET-futtatókörnyezetre, a .NET SDK-ra és a .NET-tel létrehozott szoftverekre vonatkozik. Ez a cikk a .NET és a macOS-alapú notarizálással kapcsolatos gyakori forgatókönyveket ismerteti.

A .NET telepítése

A .NET telepítőit (futtatókörnyezetet és SDK-t is) 2020. február 18. óta notarizálták. A korábbi kiadású verziók nem lesznek notarizálva. A .NET nem hitelesített verziójának manuális telepítését először a telepítő letöltésével, majd a sudo installer letöltött telepítővel történő parancs használatával végezheti el.

Natív appHost

Amikor az alkalmazást lefordítják, létrejön egy appHost, amely egy natív Mach-O végrehajtható fájl. Ezt a végrehajtható fájlt általában a .NET hívja meg, amikor a projekt lefordítja, közzéteszi vagy futtatja a dotnet run parancsot. Az alkalmazásnak a nem appHost verziója egy dll-fájl, amelyet a dotnet <app.dll> parancs segítségével lehet meghívni.

Helyi futtatáskor az SDK alkalmi aláírással aláírja az apphostot, amely lehetővé teszi az alkalmazás helyi futtatását. Az alkalmazás terjesztésekor az Apple útmutatása szerint megfelelően alá kell írnia az alkalmazást.

Az alkalmazást az apphost nélkül is terjesztheti, és a felhasználókra támaszkodhat az dotnet használatával történő futtatás során. Az appHost-létrehozás kikapcsolásához adja hozzá a UseAppHost logikai beállítást a projektfájlhoz, és állítsa be a következőrefalse: . Az appHost be-/kikapcsolható a -p:UseAppHost paraméterrel a parancssorban a konkrét dotnet parancshoz, amelyet futtat:

  • Projektfájl

    <PropertyGroup>
      <UseAppHost>false</UseAppHost>
    </PropertyGroup>
    
  • Parancssori paraméter

    dotnet run -p:UseAppHost=false
    

Ha az alkalmazást önállóan teszi közzé, akkor szükség van egy appHost-ra, amit nem lehet letiltani.

A beállításról további információt a UseAppHost Microsoft.NET.Sdk MSBuild tulajdonságai című témakörben talál.

Az appHost környezete

Ha az appHost engedélyezve van a projektben, és ön a dotnet run parancsot használja az alkalmazás futtatásához, a rendszer az appHost kontextusában hívja meg az alkalmazást, és nem az alapértelmezett gazdagépet (az alapértelmezett gazdagép a dotnet parancs). Ha az appHost le van tiltva a projektben, a dotnet run parancs az alapértelmezett gazdagép környezetében futtatja az alkalmazást. Még akkor is, ha az appHost le van tiltva, az alkalmazás önállóként való közzététele létrehoz egy végrehajtható appHostot, és a felhasználók ezt a végrehajtható fájlt használják az alkalmazás futtatásához. Az alkalmazást az alapértelmezett gazdagéppel, a megosztott futtatókörnyezettel futtatva dotnet <filename.dll>, meghívja az alkalmazást.

Az appHostot használó alkalmazás meghívásakor az alkalmazás által elért tanúsítványpartíció eltér a tanúsított alapértelmezett gazdagéptől. Ha az alkalmazásnak hozzá kell férnie az alapértelmezett gazdagépen telepített tanúsítványokhoz, a dotnet run paranccsal futtassa az alkalmazást a projektfájlból, vagy használja a dotnet <filename.dll> parancsot az alkalmazás közvetlen elindításához.

Erről a forgatókönyvről további információt a ASP.NET Core és a macOS, valamint a tanúsítványok című szakaszban talál.

ASP.NET Core, macOS és tanúsítványok

A .NET lehetővé teszi a macOS-kulcskarika tanúsítványainak kezelését az System.Security.Cryptography.X509Certificates osztálysal. A macOS-kulcskarikához való hozzáférés az alkalmazások identitását használja elsődleges kulcsként, amikor eldönti, hogy melyik partíciót vegye figyelembe. Az aláíratlan alkalmazások például titkos kulcsokat tárolnak az aláíratlan partíción, de az aláírt alkalmazások a titkos kulcsaikat csak azok partícióiban tárolják, amelyekhez csak ők férhetnek hozzá. Az alkalmazást meghívó végrehajtási forrás dönti el, hogy melyik partíciót használja.

A .NET három végrehajtási forrást biztosít: appHost, alapértelmezett gazdagép (a dotnet parancs) és egy egyéni gazdagép. Minden végrehajtási modell különböző identitásokkal rendelkezhet, aláírt vagy aláíratlan, és a Kulcskarika különböző partícióihoz férhet hozzá. Előfordulhat, hogy az egyik módban importált tanúsítványok nem érhetők el egy másikból. A .NET közjegyző által hitelesített verziói például rendelkeznek egy aláírt alapértelmezett tárhellyel. A tanúsítványokat a rendszer az identitása alapján importálja egy biztonságos partícióba. Ezek a tanúsítványok nem érhetők el egy létrehozott appHostból, mivel az appHost eseti aláírással rendelkezik.

Egy másik példa alapértelmezés szerint ASP.NET Core egy alapértelmezett SSL-tanúsítványt importál az alapértelmezett gazdagépen keresztül. ASP.NET az appHostot használó alapvető alkalmazások nem férnek hozzá ehhez a tanúsítványhoz, és hibaüzenetet kapnak, ha a .NET észleli, hogy a tanúsítvány nem érhető el. A hibaüzenet útmutatást nyújt a probléma megoldásához.

Ha tanúsítványmegosztásra van szükség, a macOS konfigurációs beállításokat biztosít a security segédprogrammal.

A ASP.NET Core-tanúsítványokkal kapcsolatos problémák elhárításáról további információt a HTTPS kényszerítése a ASP.NET Core-ban című témakörben talál.

Alapértelmezett jogosultságok

A .NET alapértelmezett gazda (a dotnet parancs) alapértelmezett jogosultságokkal rendelkezik. Ezek a jogosultságok szükségesek a .NET megfelelő működéséhez. Előfordulhat, hogy az alkalmazásnak további jogosultságokra van szüksége, ebben az esetben létre kell hoznia és használnia kell egy appHostot , majd helyileg hozzá kell adnia a szükséges jogosultságokat.

A .NET-hez tartozó jogosultságok alapértelmezett készlete:

  • 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-alkalmazás hitelesítése

Ha azt szeretné, hogy az alkalmazás macOS Catalinán (10.15-ös vagy újabb verzió) fusson, akkor érdemes lesz az alkalmazást közjegyzőhöz rendelni. Az alkalmazással a notarizáláshoz beküldött appHostot legalább ugyanazokkal az alapértelmezett jogosultságokkal kell használni a .NET Core-hoz.

Következő lépések