Bagikan melalui


macOS Catalina Notarization dan dampaknya pada unduhan dan proyek .NET

Dimulai dengan macOS Catalina (versi 10.15), semua perangkat lunak yang dibuat setelah 1 Juni 2019, dan didistribusikan dengan Developer ID, harus disahkan oleh notaris. Persyaratan ini berlaku untuk runtime .NET, SDK .NET, dan perangkat lunak yang dibuat dengan .NET. Artikel ini menjelaskan skenario umum yang mungkin Anda hadapi pada notarisasi .NET dan macOS.

Menginstal .NET

Alat penginstal untuk .NET (runtime dan SDK) telah disahkan sejak 18 Februari 2020. Versi yang dirilis sebelumnya tidak disahkan. Anda dapat menginstal versi .NET yang tidak disahkan secara manual dengan terlebih dahulu mengunduh alat penginstal, lalu menggunakan perintah sudo installer. Untuk informasi selengkapnya, lihat Mengunduh dan menginstal secara manual untuk macOS.

AppHost native

Di .NET SDK 7 dan versi yang lebih baru, appHost, yang merupakan file executable Mach-O asli, diproduksi untuk aplikasi Anda. File executable ini biasanya digunakan oleh .NET saat proyek Anda mengompilasi, menerbitkan, atau dijalankan dengan perintah dotnet run. Versi non-appHost dari aplikasi Anda adalah file dll yang dapat dipanggil oleh perintah dotnet <app.dll>.

Saat dijalankan secara lokal, SDK menandatangani apphost menggunakan penandatanganan ad hoc, yang memungkinkan aplikasi berjalan secara lokal. Saat mendistribusikan aplikasi, Anda harus menandatangani aplikasi dengan benar sesuai dengan panduan Apple.

Anda juga dapat mendistribusikan aplikasi tanpa apphost dan mengandalkan pengguna untuk menjalankan aplikasi Anda menggunakan dotnet. Untuk menonaktifkan pembuatan appHost, tambahkan pengaturan boolean UseAppHost dalam file proyek dan atur ke false. Anda juga dapat mengaktifkan/menonaktifkan appHost dengan parameter -p:UseAppHost pada baris perintah untuk perintah dotnet tertentu yang Anda jalankan:

  • File proyek

    <PropertyGroup>
      <UseAppHost>false</UseAppHost>
    </PropertyGroup>
    
  • Parameter baris-perintah

    dotnet run -p:UseAppHost=false
    

appHost diperlukan saat Anda menerbitkan aplikasi Anda mandiri dan Anda tidak dapat menonaktifkannya.

Untuk informasi selengkapnya tentang pengaturan UseAppHost, lihat Properti MSBuild untuk Microsoft.NET.Sdk.

Konteks appHost

Ketika appHost diaktifkan di proyek Anda, dan Anda menggunakan perintah dotnet run untuk menjalankan aplikasi, aplikasi akan dipanggil dalam konteks appHost, bukan host default (host default adalah perintah dotnet). Jika appHost dinonaktifkan di proyek Anda, perintah dotnet run akan menjalankan aplikasi Anda dalam konteks host default. Meskipun appHost dinonaktifkan, penerbitan aplikasi mandiri Anda akan menghasilkan file executable appHost, dan pengguna menggunakan file executable itu untuk menjalankan aplikasi Anda. Menjalankan aplikasi Anda dengan dotnet <filename.dll> memanggil aplikasi dengan host default, runtime bersama.

Ketika aplikasi yang menggunakan appHost dipanggil, partisi sertifikat yang diakses oleh aplikasi tersebut berbeda dari host default yang disahkan. Jika aplikasi Anda harus mengakses sertifikat yang diinstal melalui host default, gunakan perintah dotnet run untuk menjalankan aplikasi Anda dari file proyek, atau gunakan perintah dotnet <filename.dll> untuk memulai aplikasi secara langsung.

Informasi selengkapnya tentang skenario ini disediakan di bagian ASP.NET Core, macOS, dan sertifikat.

ASP.NET Core, macOS, dan sertifikat

.NET menyediakan kemampuan untuk mengelola sertifikat di macOS Keychain dengan kelas System.Security.Cryptography.X509Certificates. Akses ke macOS Keychain menggunakan identitas aplikasi sebagai kunci primer saat memutuskan partisi mana yang perlu dipertimbangkan. Misalnya, aplikasi yang tidak ditandatangani menyimpan rahasia di partisi yang tidak ditandatangani, tetapi aplikasi yang ditandatangani menyimpan rahasia di partisi yang dapat diakses hanya oleh aplikasi tersebut. Sumber eksekusi yang memanggil aplikasi Anda menentukan partisi mana yang akan digunakan.

.NET menyediakan tiga sumber eksekusi: appHost, host default (perintah dotnet), dan host kustom. Setiap model eksekusi dapat memiliki identitas yang berbeda, baik yang ditandatangani atau yang tidak ditandatangani, dan memiliki akses ke partisi yang berbeda di dalam Keychain. Sertifikat yang diimpor oleh satu mode mungkin tidak dapat diakses dari mode lain. Misalnya, versi .NET yang disahkan memiliki host default yang telah ditandatangani. Sertifikat diimpor ke partisi aman berdasarkan identitasnya. Sertifikat ini tidak dapat diakses dari appHost yang dihasilkan, karena appHost ditandatangani ad-hoc.

Contoh lainnya, secara default, ASP.NET Core mengimpor sertifikat SSL default melalui host default. Aplikasi ASP.NET Core yang menggunakan appHost tidak akan memiliki akses ke sertifikat ini dan akan menerima kesalahan ketika .NET mendeteksi sertifikat tidak dapat diakses. Pesan kesalahan menyediakan instruksi tentang cara memperbaiki masalah ini.

Jika berbagi sertifikat diperlukan, macOS menyediakan opsi konfigurasi dengan utilitas security.

Untuk informasi selengkapnya tentang cara memecahkan masalah sertifikat ASP.NET Core, lihat Menerapkan HTTPS di ASP.NET Core.

Pemberian hak default

Host default .NET (perintah dotnet) memiliki serangkaian pemberian hak default. Pemberian hak ini diperlukan untuk operasi .NET yang tepat. Ada kemungkinan bahwa aplikasi Anda memerlukan hak tambahan. Dalam hal ini, Anda harus membuat dan menggunakan appHost, lalu menambahkan hak yang diperlukan secara lokal.

Rangkaian default pemberian hak untuk .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

Mengesahkan aplikasi .NET

Jika Anda ingin aplikasi Anda berjalan di macOS Catalina (versi 10.15) atau yang lebih baru, Anda perlu mengesahkan aplikasi tersebut. appHost yang Anda kirimkan dengan aplikasi untuk notarisasi harus digunakan dengan setidaknya hak default yang sama untuk .NET Core.

Langkah berikutnya