TLS 通信中涉及的组件介绍

204 阅读2分钟

Keychain

Keychain 是一种用于存储和管理私钥、证书以及敏感信息(如密码、API 密钥等)的安全容器。它常见于以下场景:

  • 移动和桌面操作系统

    • macOS 和 iOS 提供内置的 Keychain Services,用于安全存储用户的凭证和密钥。
    • Android 提供 Keystore,实现类似功能。
  • 功能

    • 存储私钥(Private Key)和证书(Certificate)。
    • 提供加密和解密服务,而不暴露私钥。
    • 保护敏感信息,防止未经授权的访问。
  • 用途

    • 确保敏感信息只对授权应用程序或用户可用。
    • 存储加密密钥或身份验证信息。

Certificate Chain(证书链)

Certificate Chain 是一个包含一系列证书的链条,用于验证目标证书(通常是一个服务器或用户证书)的可信度。

  • 链的结构

    • 从目标证书(例如网站的 SSL/TLS 证书)开始。
    • 包含一系列中间证书。
    • 以可信的根证书(Root Certificate)结尾。
  • 验证流程

    1. 检查目标证书是否由可信的中间证书签发。
    2. 继续检查中间证书,直到找到受信任的根证书。
    3. 如果链中的所有证书都有效且根证书受信任,则目标证书被认为是可信的。
  • 用途

    • 证书链确保数字证书的真实性,防止篡改或伪造。
    • 常见于 HTTPS、TLS、代码签名和其他基于 PKI(公钥基础设施)的场景。

Certificate Chain 与 Keychain 的联系

  • 证书链可以存储在 Keychain 中
    例如,系统的 Keychain 或 Android Keystore 通常存储用户的数字证书和其对应的私钥,其中包含证书链的一部分(目标证书和中间证书)。

  • 互补关系

    • Keychain 是安全的存储工具,保护证书链中的私钥不被泄露。
    • CertificateChain 提供信任验证机制,确保目标证书和私钥的可信性。

KeyStore

Android Keystore 是 Android 平台提供的一种安全机制,用于生成、存储和管理加密密钥,确保敏感数据的安全性。主要有以下功能:

  • 密钥存储:安全存储对称密钥(如 AES)、非对称密钥对(如 RSA、EC)、以及证书。

  • 密钥保护:通过硬件(如 TEE 或 StrongBox)或软件层提供保护,密钥默认不可导出。

  • 密钥管理:支持生成、存储、更新和删除密钥。

  • 绑定设备:密钥与设备绑定,即使密钥被导出到其他设备也无法使用。

  • 应用隔离:密钥与应用签名绑定,其他应用无法访问。

Android KeyStore 官方 可以从官方文档大致猜测,底层应该是通过控制Selinux权限控制不同的命名空间(有的Selinux域,会使用UID作为命名空间),这样就保证不同的应用在不同的命名空间,即达到应用隔离的目的。

image.png