Sign 與 Notarize macOS 安裝檔或應用程式

自 2012 年起,macOS 開始內建 GateKeeper 安全技術。GateKeeper 可以保護確保使用者正在執行的應用程式未經過第三方修改,也沒有惡意程式碼在其中。接著從 macOS 10.15 起,macOS 更進一步要求所有在 2019 年 6 月 1…

分享

自 2012 年起,macOS 開始內建 GateKeeper 安全技術。GateKeeper 可以保護確保使用者正在執行的應用程式未經過第三方修改,也沒有惡意程式碼在其中。接著從 macOS 10.15 起,macOS 更進一步要求所有在 2019 年 6 月 1 日後所出品的應用程式,都必須經過公證(Notarize)後才能通過 GateKeeper 檢查。

所以,開發者在把應用程式上架到非 App Store 的管道時,必須將應用程式進行簽署且公證,以符合最新的 GateKeeper 規定。應用程式的簽署憑證,可以到 Apple Developer 網站交換後取得,交換時需選擇 Developer ID Installer macOS,並安裝至 macOS Keychain。

進行簽署(Signing)

在終端機上輸入 security find-identity -v 找到用於簽署 Installer 的憑證。前面那一串數字加英文是憑證的識別資訊,後面則是憑證名稱。將後面的憑證名稱複製下來。

使用 productsign -sign “剛才複製的憑證名稱貼於此處” 來源PKG檔的位置 目的地PKG的位置。透過這行指令,會將簽署過後的 PKG 存放在目的地位置。 ProductSign 是一個 Xcode 工具,需要先安裝 XCode 才能使用。

例如:productsign -sign “Developer ID Installer: Glee Tsai (XXXXX2J4Y3)” ~/Desktop/Jamf-connect-trial-downloader.pkg ~/Desktop/signed-Jamf-connect-trial

進行公證(Notarization)

  1. 沒有經過簽署的程式無法進行公證。接著使用 xcrun altool -notarize-app -primary-bundle-id “BundleID 名稱” -username “開發者 Apple ID” -password “APP-SPECIFIC PASSWORDS” -file “要公證的程式路徑” -team-id “團隊編號”。
  2. APP-SPECIFIC PASSWORDS 可以至 Apple ID 網站 登入帳號後申請。
  3. 例如:xcrun altool -notarize-app -primary-bundle-id “me.gleetsai.jamfconnect.trial” -username “[email protected] “ -password “????-????-????-????” -file “/Users/glee.tsai/Desktop/signed-Jamf-connect-trial.pkg” -team-id “?????2J4Y3”
  4. 因為公證是一個自動化過程,當程式沒有被檢查出任何問題後,就會完成公證。此時需要檢查公證結果。
    xcrun altool -notarization-info “BundleID 名稱” -username “[email protected]” -password “????-????-????-????”
  5. 確認公證結果無誤後。Apple 就會發行這個軟體的公證票據,並將此票據打在程式上。
    xcrun stapler staple ~/Desktop/signed-Jamf-connect-trial.pkg
  6. 最後驗證該票據已確實的打在程式上。
    stapler validate -verbose ~/Desktop/signed-Jamf-connect-trial.pkg

Originally published at https://gleetsai.me on September 11, 2021.

Read more

Managed Preferences 到底贏不贏得過本機設定?自己寫工具測給自己看

Managed Preferences 到底贏不贏得過本機設定?自己寫工具測給自己看

在管理一批用 MDM 集中控管的 Mac 時,常常會遇到一個問題:某個 preference key,使用者自己用 defaults write 改過一次,管理員可能又用 sudo defaults write 在系統層級動過一次,最後 MDM 又把同一個 key 標成 Managed(強制)。這時候系統實際生效的到底是哪一個值? Apple 官方文件對 CFPreferencesAppValueIsForced 這支 API 的說明相當簡略,只告訴你這個 API 可以拿來判斷某個 key 是不是被強制,卻沒有把整個 preference 搜尋順序裡各層級的先後關係講清楚。網路上能找到的資訊也大多是憑印象轉述,沒有人真的擺出證據。 與其對著文件猜,不如自己寫一支工具,實際測給自己看。以下這篇的測試環境是 macOS Tahoe 26.6.

By Glee Tsai
Apple 生態系的真實威脅—我們都可能是目標

Apple 生態系的真實威脅—我們都可能是目標

從一場分享開始的警醒 前陣子在 Jamf Nation Live Taipei 分享了 2024-2025 年 Apple 裝置威脅報告,深入探討了全球 Apple 生態系正面臨的資訊安全威脅。 許多人對 Apple 產品有一種根深蒂固的信心—拿著 Mac 或 iPhone,就像拿到了數位世界的「免死金牌」。說實話,Apple 在軟硬體整合上的安全設計確實領先業界,這不是誇大其詞。但也正因為這份信心,我開始想更深入地了解真實情況。 從 Jamf Security 360 報告開始,我觀察了全球情報機構(如 Citizen Lab、Google TAG、Kaspersky)揭露的真實案例。那時我才意識到一個有點殘酷的事實,也正好對應了同事最常對我說的那句話:Apple 設備並非堅不可摧,使用者自身往往才是最大的弱點。 為什麼 Apple

By Glee Tsai

從 Jamf Pro 自定義註冊畫面帶使用者資訊至 Jamf Connect 失敗的處理方式

Jamf Pro 在設定裡面的 Enrollment Customization,本來可以設定在使用者完成設備註冊的當下,同步把 SAML 裡的資訊帶給後面的 Jamf Connect Login,這樣就可以減少一步使用者還需要登入的步驟。但在撰文的當下,Jamf Pro 11.1 仍在這個功能上有問題,在跟 Jamf Support Team 了解後,大概能用一種 Workaround 來解決,只是要特別留意以下事情: 1. 在 Jamf Pro 裡的 Enrollment Customization 不要再打勾 Enable Jamf Pro to pass user information to Jamf Connect 了(因為勾了也沒有用) 2. 確保

By Glee Tsai

在 Apple 零接觸部署下僅允許某個群組啟動設備

在 Jamf Pro 有整合 Single Sign On 的情況下,可以前往 Settings > Enrollment Customization 設定僅允許一個群組中的成員啟用設備。如果這個成員沒有在這個群組裡面的話,就不能夠開箱設備。如果以 Entra ID 為例,需要把 Object ID 填在下方的欄位即可。 對照到我在 Entra ID 上的群組設置: 至於如果不是 Entra ID,而是其它的 SSO Provider 的話,最好可以用 SAML Tracer 這一套 Google Chrome 外掛去看一下自己的 SAML 文件是如何表達群組的,例如下圖能看到這個使用者屬於以下五個群組。 接著有另外一個很重要的事情要提醒,如果你要阻擋註冊的成員,可以登入到 Jamf Pro

By Glee Tsai