macOS Catalina Notarization ve .NET indirmeleri ve projeleri üzerindeki etkisi

macOS Catalina 'dan (sürüm 10.15) başlayarak, 1 Haziran 2019'dan sonra oluşturulan ve Geliştirici Kimliği ile dağıtılan tüm yazılımların noter onaylı olması gerekir. Bu gereksinim .NET çalışma zamanı, .NET SDK'sı ve .NET ile oluşturulan yazılımlar için geçerlidir. Bu makalede .NET ve macOS noter tasdikinde karşılaşabileceğiniz yaygın senaryolar açıklanmaktadır.

.NET'i yükleme

.NET (hem çalışma zamanı hem de SDK) yükleyicileri 18 Şubat 2020'den bu yana noter onaylıdır. Önceki sürümler noter onaylı değildir. Önce yükleyiciyi indirip ardından komutunu kullanarak sudo installer .NET'in noter onaylı olmayan bir sürümünü el ile yükleyebilirsiniz. Daha fazla bilgi için bkz . macOS için indirme ve el ile yükleme.

Yerel appHost

.NET SDK 7 ve sonraki sürümlerinde, uygulamanız için yerel bir Mach-O yürütülebilir dosyası olan appHost oluşturulur. Bu yürütülebilir dosya genellikle projeniz derlendiğinde, yayımladığında veya komutuyla çalıştırıldığında .NET tarafından çağrılır dotnet run . Uygulamanızın appHost olmayan sürümü, komutu tarafından dotnet <app.dll> çağrılabilen bir dll dosyasıdır.

Yerel olarak çalıştırıldığında SDK, uygulamanın yerel olarak çalışmasını sağlayan geçici imzalamayı kullanarak apphost'u imzalar. Uygulamanızı dağıtırken, Apple kılavuzuna göre uygulamanızı düzgün bir şekilde imzalamanız gerekir.

Ayrıca uygulamanızı apphost olmadan dağıtabilir ve kullanarak dotnetuygulamanızı çalıştırmak için kullanıcılara güvenebilirsiniz. appHost oluşturma özelliğini kapatmak için proje dosyasına boole ayarını ekleyin UseAppHost ve olarak falseayarlayın. AppHost'u, çalıştırdığınız belirli dotnet komutun -p:UseAppHost komut satırındaki parametresiyle de değiştirebilirsiniz:

  • Proje dosyası

    <PropertyGroup>
      <UseAppHost>false</UseAppHost>
    </PropertyGroup>
    
  • Komut satırı parametresi

    dotnet run -p:UseAppHost=false
    

Uygulamanızı bağımsız olarak yayımladığınızda appHost gereklidir ve uygulamayı devre dışı bırakamazsınız.

Ayar hakkında UseAppHost daha fazla bilgi için bkz . Microsoft.NET.Sdk için MSBuild özellikleri.

appHost bağlamı

Projenizde appHost etkinleştirildiğinde ve uygulamanızı çalıştırmak için komutunu kullandığınızda dotnet run , uygulama varsayılan ana bilgisayar bağlamında değil appHost bağlamında çağrılır (varsayılan ana bilgisayar komutudur dotnet ). appHost projenizde devre dışı bırakılırsa, dotnet run komut uygulamanızı varsayılan konak bağlamında çalıştırır. appHost devre dışı bırakılsa bile, uygulamanızı bağımsız olarak yayımlamak bir appHost yürütülebilir dosyası oluşturur ve kullanıcılar uygulamanızı çalıştırmak için bu yürütülebilir dosyayı kullanır. Uygulamanızı ile dotnet <filename.dll> çalıştırmak, uygulamayı varsayılan ana bilgisayar olan paylaşılan çalışma zamanıyla çağırır.

appHost kullanan bir uygulama çağrıldığında, uygulama tarafından erişilen sertifika bölümü noter onaylı varsayılan konaktan farklıdır. Uygulamanızın varsayılan ana bilgisayar aracılığıyla yüklenen sertifikalara erişmesi gerekiyorsa, komutunu kullanarak dotnet run uygulamanızı proje dosyasından çalıştırın veya komutunu kullanarak dotnet <filename.dll> uygulamayı doğrudan başlatın.

Bu senaryo hakkında daha fazla bilgi ASP.NET Core ve macOS ve sertifikalar bölümünde sağlanır.

ASP.NET Core, macOS ve sertifikalar

.NET, macOS Anahtar Zincirindeki sertifikaları sınıfıyla System.Security.Cryptography.X509Certificates yönetme olanağı sağlar. macOS Anahtar Zincirine erişim, dikkate alınacak bölüme karar verirken birincil anahtar olarak uygulama kimliğini kullanır. Örneğin, imzalanmamış uygulamalar gizli dizileri imzasız bölümde depolar, ancak imzalı uygulamalar gizli dizilerini yalnızca erişebilecekleri bölümlerde depolar. Hangi bölümün kullanılacağına uygulamanızı çağıran yürütme kaynağı karar verir.

.NET üç yürütme kaynağı sağlar: appHost, varsayılan konak ( dotnet komut) ve özel bir konak. Her yürütme modelinin imzalı veya imzasız farklı kimlikleri olabilir ve Anahtarlık içindeki farklı bölümlere erişimi olabilir. Bir mod tarafından içeri aktarılan sertifikalara başka bir moddan erişilemiyor olabilir. Örneğin, .NET'in noter onaylı sürümlerinde imzalanmış varsayılan bir ana bilgisayar vardır. Sertifikalar, kimliğine göre güvenli bir bölüme aktarılır. appHost geçici olarak imzalandığından, bu sertifikalara oluşturulan appHost'tan erişilemez.

Varsayılan olarak ASP.NET Core'un varsayılan ana bilgisayar aracılığıyla varsayılan SSL sertifikasını içeri aktardığı başka bir örnek. ASP.NET AppHost kullanan Core uygulamaları bu sertifikaya erişemez ve .NET sertifikanın erişilebilir olmadığını algıladığında bir hata alır. Hata iletisi, bu sorunun nasıl düzeltileceğini açıklayan yönergeler sağlar.

Sertifika paylaşımı gerekiyorsa, macOS yardımcı programıyla security yapılandırma seçenekleri sağlar.

ASP.NET Core sertifika sorunlarını giderme hakkında daha fazla bilgi için bkz . ASP.NET Core'da HTTPS'yi zorunlu kılma.

Varsayılan yetkilendirmeler

. NET'in varsayılan ana bilgisayarının ( dotnet komut) bir dizi varsayılan yetkilendirmesi vardır. Bu yetkilendirmeler .NET'in düzgün bir şekilde çalıştırılması için gereklidir. Uygulamanızın ek yetkilendirmelere ihtiyacı olabilir. Bu durumda bir appHost oluşturup kullanmanız ve ardından gerekli yetkilendirmeleri yerel olarak eklemeniz gerekir.

.NET için varsayılan yetkilendirme kümesi:

  • 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 uygulamasını noter olarak belirleme

Uygulamanızın macOS Catalina (sürüm 10.15) veya üzeri sürümlerde çalışmasını istiyorsanız, uygulamanızı noter olarak almak istersiniz. Noter tasdik için uygulamanızla gönderdiğiniz appHost, .NET Core için en az aynı varsayılan yetkilendirmelerle kullanılmalıdır.

Sonraki adımlar