mac应用关于签名,认证和运行时的介绍

134 阅读4分钟

这是macOS安全机制的核心。

代码签名和公证,系统依然会弹出权限请求的对话框。

下面我来详细解释一下为什么,以及这几个安全机制各自扮演的角色。


签名、公证、和运行时权限是三道不同的“安全门”

您可以把macOS的这套安全体系理解为进入一个重要建筑的三道安检程序,它们的目的各不相同,缺一不可。

1. 代码签名 (Code Signing):验证“你是谁”

  • 目的:确认应用的开发者身份,并保证应用自签名后没有被篡改过。

  • 好比:这是第一道门,检查您的身份证。保安(Gatekeeper)需要确认两件事:

    1. 你确实是张三,而不是别人冒充的(身份验证)。
    2. 你的身份证没有被涂改或伪造(完整性)。
  • 用户体验:如果一个应用没有签名或者签名无效,macOS会阻止其运行,并警告用户“无法验证开发者”或“文件已损坏”(因为内容被修改,签名失效)。

2. 公证 (Notarization):确认“你没有明显危险”

  • 目的:这是苹果对您的应用进行的自动扫描,检查其中是否包含已知的恶意软件或安全风险。
  • 好比:这是第二道门,对您的行李进行安检扫描。保安(苹果的服务器)用X光机检查你的包里有没有枪支、炸药等违禁品。这不代表你进入大楼后可以为所欲为,只代表你进入时没有携带明显的危险品。
  • 用户体验:经过公证的应用,用户在首次打开时会看到一个更友好的提示:“Apple 已检查其未包含恶意软件”。这给了用户更大的信心。如果应用没有被公证,在较新的macOS版本上,Gatekeeper默认会阻止其运行。

3. 运行时权限 (Runtime Permissions / TCC):授权“你能做什么”

  • 目的:在应用已经被信任(通过了签名和公证)并开始运行后,精细地控制它能访问哪些敏感数据或系统功能。这个机制也叫做 TCC (Transparency, Consent, and Control)

  • 好比:这是第三道门,也是最关键的一道。你已经进入了大楼(应用已运行),但你想进入特定的房间(如“会议室”、“档案室”)。你必须向大楼的管理员(操作系统)申请,并由大楼的主人(用户)亲自授权:“是的,我允许张三进入会议室”。

  • 用户体验:这就是您所说的“弹出来让你去选择”的对话框。例如:

    • “App名称”想要访问您的相机。
    • “App名称”想要访问您“下载”文件夹中的文件。
    • “App名称”想要录制此电脑的屏幕。

总结与对比

为了更清晰地说明,这里有一个表格来对比这三者的区别:

安全机制目的何时发生对用户/开发者的意义
代码签名 (Code Signing)验证开发者身份和代码完整性开发者编译时 & 用户首次运行前信任的基石。告诉系统:“我(开发者)是谁,我保证代码没被改过。”
苹果公证 (Notarization)检查应用是否包含已知恶意软件开发者分发前 & 用户首次运行前安全的预检。告诉系统:“苹果已扫描过我,认为我没有恶意内容。”
运行时权限 (TCC)保护用户隐私和数据,由用户授权应用运行时,当它首次尝试访问敏感资源时隐私的守护。告诉用户:“这个App现在想做这件事(如用麦克风),你同意吗?”

结论

代码签名和公证解决的是应用运行前的信任问题,它们向用户和系统保证了这个App的来源是可靠的,并且没有携带已知的恶意代码。

而运行时权限解决的是应用运行后的行为控制问题,它把访问敏感数据(如通讯录、照片、位置、文件)的最终决定权交还给用户。

所以,即使您的mac应用已经完美地设置了开发者签名和苹果公证,当它第一次尝试访问摄像头、麦克风、用户的个人文件夹等受保护的资源时,macOS必定会弹出权限请求对话框,让用户来决定是否批准。这是一个核心的隐私保护设计,无法通过签名或公证来绕过。