Share via


macOS-Catalina-Notarisierung und die Auswirkungen auf .NET-Downloads und -Projekte

Ab macOS Catalina (Version 10.15) muss jegliche Software notarisiert werden, die nach dem 1. Juni 2019 erstellt wurde und mit einer Entwickler-ID verteilt wird. Diese Voraussetzung gilt für die .NET-Runtime, das .NET SDK und jegliche Software, die mit .NET erstellt wird. In diesem Abschnitt werden häufige Fälle beschrieben, die bei der .NET- und der macOS-Notarisierung auftreten können.

Installieren von .NET

Die Installationsprogramme für .NET (sowohl für die Runtime als auch das SDK) wurden seit dem 18. Februar 2020 notarisiert. Vorherige Versionen wurden nicht notarisiert. Sie können eine nicht notarisierte Version von .NET manuell installieren, indem Sie zunächst das Installationsprogramm herunterladen und dann den Befehl sudo installer ausführen. Weitere Informationen finden Sie unter Herunterladen und manuelles Installieren für macOS.

Native appHost-Instanz

Ab .NET SDK 7 wird eine appHost-Instanz, eine native ausführbare Mach-O-Datei, für Ihre App generiert. Diese ausführbare Datei wird in der Regel von .NET aufgerufen, wenn Ihr Projekt kompiliert, veröffentlicht oder mit dem Befehl dotnet run ausgeführt wird. Die Nicht-appHost-Version Ihrer App ist eine DLL-Datei, die mit dem Befehl dotnet <app.dll> aufgerufen werden kann.

Bei lokaler Ausführung signiert das SDK den App-Host mithilfe einer ad hoc-Signatur, sodass die App lokal ausgeführt werden kann. Beim Verteilen Ihrer App müssen Sie Ihre App gemäß Apple-Leitfaden ordnungsgemäß signieren.

Sie können Ihre App auch ohne den App-Host verteilen und sich darauf verlassen, dass Benutzer Ihre App mit dotnetausführen. Um die appHost-Generierung zu deaktivieren, fügen Sie der Projektdatei die boolesche Einstellung UseAppHost hinzu, und legen Sie sie auf false fest. Sie können die appHost-Datei auch mit dem -p:UseAppHost-Parameter für den spezifischen dotnet-Befehl aktivieren, den Sie über die Befehlszeile ausführen:

  • Projektdatei

    <PropertyGroup>
      <UseAppHost>false</UseAppHost>
    </PropertyGroup>
    
  • Befehlszeilenparameter

    dotnet run -p:UseAppHost=false
    

Eine appHost-Instanz ist erforderlich, wenn Sie Ihre App eigenständig veröffentlichen und sie nicht deaktivieren können.

Weitere Informationen über die UseAppHost-Einstellung finden Sie unter MSBuild-Eigenschaften für Microsoft.NET.Sdk.

Kontext der appHost-Datei

Wenn die appHost-Datei in Ihrem Projekt aktiviert ist, und Sie den dotnet run-Befehl zum Ausführen Ihrer App verwenden, wird die App im Kontext der appHost-Datei und nicht im Kontext des Standardhosts aufgerufen (der Standardhost entspricht dem dotnet-Befehl). Wenn die appHost-Datei in Ihrem Projekt deaktiviert ist, führt der dotnet run-Befehl Ihre App im Kontext des Standardhosts aus. Selbst wenn die appHost-Datei deaktiviert ist, wird eine ausführbare appHost-Datei beim Veröffentlichen Ihrer App als eigenständig generiert. Benutzer verwenden diese ausführbare Datei zum Ausführen Ihrer App. Wenn Sie Ihre App mit dotnet <filename.dll> ausführen, wird die App mit dem Standardhost aufgerufen, der Shared Runtime.

Wenn eine App aufgerufen wird, die die appHost-Datei verwendet, unterscheidet sich der Zugriff auf die App vom notarisierten Standardhost. Wenn Ihre App auf Zertifikate zugreifen muss, die über den Standardhost installiert wurden, verwenden Sie den dotnet run-Befehl zum Ausführen Ihrer App über die Projektdatei, oder verwenden Sie den dotnet <filename.dll>-Befehl, um die App direkt auszuführen.

Weitere Informationen über dieses Szenario finden Sie im Abschnitt ASP.NET Core, macOS und Zertifikate.

ASP.NET Core, macOS und Zertifikate

.NET bietet die Möglichkeit, Zertifikate in der macOS-Keychain mit der Klasse System.Security.Cryptography.X509Certificates zu verwalten. Der Zugriff auf die macOS-Keychain verwendet bei der Entscheidung, welche Partition berücksichtigt werden soll, die Identität der Anwendung als Primärschlüssel. Beispielsweise speichern nicht signierte Anwendungen Geheimnisse in der nicht signierten Partition. Signierte Anwendungen speichern ihre Geheimnisse jedoch in Partitionen, auf die nur sie zugreifen können. Die Ausführungsquelle, die Ihre App aufruft, entscheidet, welche Partition verwendet wird.

.NET bietet drei Ausführungsquellen: appHost, Standardhost (der Befehl dotnet) und einen benutzerdefinierten Host. Alle Ausführungsmodelle können verschiedene signierte oder nicht signierte Identitäten aufweisen und verfügen über Zugriff auf verschiedene Partitionen in der Keychain. Auf Zertifikate, die von einem Modus importiert werden, kann möglicherweise nicht über einen anderen Modus zugegriffen werden. Beispielsweise verfügen die notarisierten Versionen von .NET über einen Standardhost, der signiert ist. Zertifikate werden basierend auf ihrer Identität in eine sichere Partition importiert. Der Zugriff auf diese Zertifikate ist nicht in einer generierten appHost-Instanz möglich, da diese nicht signiert ist.

Ein weiteres Beispiel besteht darin, dass ASP.NET Core standardmäßig ein Standard-SSL-Zertifikat über den Standardhost importiert. ASP.NET-Core-Anwendungen, die einen appHost verwenden, verfügen über keinen Zugriff auf dieses Zertifikat. Wenn .NET ein nicht zugängliches Zertifikat ermittelt, wird ein Fehler ausgelöst. Die Fehlermeldung bietet Anweisungen zum Beheben des Problems.

Wenn die Zertifikatfreigabe erforderlich ist, bietet macOS Konfigurationsoptionen über das Hilfsprogramm security.

Weitere Informationen zur Behandlung von ASP.NET Core-Zertifikatproblemen finden Sie unter Erzwingen von HTTPS in ASP.NET Core.

Standardberechtigungen

Der Standardhost von .NET (der Befehl dotnet) verfügt über einige Standardberechtigungen. Diese Berechtigungen sind für den ordnungsgemäßen Betrieb von .NET erforderlich. Manchmal erfordert Ihre Anwendung zusätzliche Berechtigungen. In diesem Fall müssen Sie eine appHost-Datei generieren und verwenden und anschließend die erforderlichen Berechtigungen lokal hinzufügen.

Standardberechtigungen für .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

Notarisieren einer .NET-App

Wenn Sie Ihre Anwendung unter macOS Catalina (Version 10.15) oder höher ausführen möchten, müssen Sie Ihre App notarisieren. Die appHost-Datei, die Sie mit Ihrer Anwendung zur Notarisierung einreichen, sollte mindestens über die Standardberechtigungen für .NET Core verfügen.

Nächste Schritte