确保向Secure Transport对等方提供完整的证书链

时间:2014-12-18 12:41:29

标签: macos ssl ssl-certificate secure-transport

Apple的Secure Transport API定义了一个函数SSLSetCertificate,其中certRefs参数是一组证书。文档说明(强调增加):

  

您必须在certRefs[0]中放置一个SecIdentityRef对象,以标识叶证书及其对应的私钥。指定根证书是可选的; 如果未指定,则验证此处指定的证书链的根证书必须存在于系统范围的可信锚证书集中。

虽然它说" 根证书......必须存在"但它不是清楚,这样找到的信任链是否真的被提供给SSL对等方(尽管很难想出存在该要求的任何其他原因)。

  1. 如何确保 完整证书链(返回自签名根,或系统信任锚)如何提供给对等方

  2. 特别是,必须所有成分证书都包含在此certRefs参数中(或者没有结果)?

  3.   

    <子>的背景

         

    这个问题遵循an earlier post on ServerFault。现在有了RTFS,很清楚slapd calls SSLSetCertificateonly the host's identity certificate并且在任何阶段都没有尝试为安全传输提供证书链 - 也许这没关系(因为安全传输应该对它进行排序),但我有预感,这可能是问题的原因。

1 个答案:

答案 0 :(得分:0)

好的,我已经陷入libsecurity_ssl并相信:

我总结道:

  1.   

    如何确保 完整证书链(返回自签名根,或者系统信任锚)是如何提供给对等方的?

    将其传递给SSLSetCertificate

  2.   

    特别是,必须所有成分证书都包含在此certRefs参数中(或者没有结果)?

    从文档和代码评论来看,似乎Apple的意图可能是将来改变这一点,但暂时......是的,他们必须。