Macos 确保提供完整的证书链以保护传输对等点
苹果的安全传输API定义了一个函数,Macos 确保提供完整的证书链以保护传输对等点,macos,ssl,ssl-certificate,secure-transport,Macos,Ssl,Ssl Certificate,Secure Transport,苹果的安全传输API定义了一个函数,certRefs参数是一个证书数组。文件说明(重点补充): 必须在certRefs[0]中放置一个SecIdentityRef对象,用于标识叶证书及其相应的私钥。指定根证书是可选的;如果未指定,则验证此处指定的证书链的根证书必须存在于系统范围的受信任锚证书集中 虽然它说“根证书…必须存在”,但并不清楚这样发现的信任链是否会实际提供给SSL对等方(尽管很难想到存在该要求的任何其他原因) 如何确保向对等方提供完整的证书链(返回到自签名根,或者系统信任锚) 特别是,
certRefs
参数是一个证书数组。文件说明(重点补充):
必须在certRefs[0]
中放置一个SecIdentityRef
对象,用于标识叶证书及其相应的私钥。指定根证书是可选的;如果未指定,则验证此处指定的证书链的根证书必须存在于系统范围的受信任锚证书集中
虽然它说“根证书…必须存在”,但并不清楚这样发现的信任链是否会实际提供给SSL对等方(尽管很难想到存在该要求的任何其他原因)
certRefs
参数中包含所有成分证书(或该参数是否没有关系)SSLSetCertificate
在任何阶段都试图提供带有证书链的安全传输——也许这没关系(因为安全传输应该能够解决所有问题),但我有一种预感,这可能是问题的原因
好吧,我已经苦读了
libsecurity\u ssl
,相信:
- 将上下文的
设置为localCert
- 它(接收和)链接到一个链表。虽然注释将此列表称为“证书链”-实际上,局部变量名为
,并且-实际上它只是特别是,信任链既不检查也不验证,尽管如此。certChain
- 尽管进行了彻底的搜索,我还是找不到安全传输以前在证书链上执行任何进一步工作的地方。这表明问题中的引用事实上是错误的:丢失的根证书(当前)不需要包含在系统信任锚中
SSLSetCertificate
certRefs
参数中包含所有成分证书(或该参数是否没有关系)
从文档和代码注释来看,似乎苹果的意图可能是在未来改变这一点,但目前……是的,他们必须这样做