【每天学一点】iOS证书(2021.2.1)

1,012 阅读3分钟

学习素材

Get

  1. 为什么本地证书过期了,不影响AppStore的下载? Apple的公钥①存在iOS系统中,私钥②存在苹果的后台服务器。上传Appstore时使用苹果的私钥②进行签名,下载后iOS系统使用Apple的公钥①进行签名校验。整个过程与本地的证书无关,所以本地证书过期不影响AppStore版本。

  2. 非对称的加密与签名

  • 公钥和私钥是一对,使用公钥加密可以使用私钥解密,使用私钥加密也可以使用公钥解密。
  • 签名用于校验数据是否被篡改,不关注数据的私密性。过程:对原始数据使用算法(sha/md5)算出摘要,使用私钥对摘要加密得到签名,将原始数据、摘要算法、签名传给接收方,接收方收到数据后使用公钥解签名得到摘要②,使用原始数据和摘要算法得到摘要①,对比摘要①和摘要②,相同表示数据未被篡改。
  • 加密主要用于私密数据的保护,防止内容泄露。过程:使用者下载提供方的公钥,使用该公钥对原始数据①加密得到加密后数据②,接收方使用自己的私钥对加密后数据②进行解密,得到原始数据①
  1. Adhoc版本的证书管理 二次签名

存在两对公钥私钥,分别为Apple的公钥A和私钥A, 本地(Local)的公钥L和私钥L。
3.1 通过KeyChain申请了本地的公私钥L, 得到CertificateSigningRequest.certSigningRequest(实质是公钥L)。
3.2 打开developer.apple.com, 申请证书,将CertificateSigningRequest.certSigningRequest上传,苹果使用私钥A对公钥L进行签名得到.cer证书文件(包含公钥L、签名)。
3.3 用户打包app, 使用本地私钥L对app进行签名①,并将签名①和3.2得到的.cer放入app中。
3.4 用户得到app, 使用iOS系统公钥A对.cer文件进行签名校验,ok后提取公钥L对App进行签名校验。间接保证App数据未被篡改。

  1. 摘要算法很重要 摘要算法可以对很长的数据生成固定长度固定序列串(摘要),通过摘要来校验内容是否被篡改。对摘要进行加解密是轻量的。

  2. 常用格式 名称 | 说明 --- | --- CertificateSigningRequest.certSigningRequest | 公钥 .cer | 本地公钥\Apple私钥A签名数据\证书发行人信息(Apple公司)\使用签名的算法:sha256 + RSA2048\证书有效期\开发者帐号信息 .mobileprovision | 包括配置Entitlements、设备列表ProvisionedDevices、名字、过期时间、DeveloperCertificatesIDs等信息

  3. 相关脚本


# 查看.certSigningRequest
$ openssl req -noout -text -in /xxx位置/CertificateSigningRequest.certSigningRequest

# 查看.cer证书内容
$ openssl x509 -inform der -noout -text -in /xxx位置/development.cer

# 查看.mobileprovision
$ security cms -D -i /xxx位置/Test_AdHoc_ProvisioningProfile.mobileprovision