有人可以解释在此处验证所描述的证书与自签名证书之间的区别:
和SSL固定如下所述:
https://infinum.co/the-capsized-eight/how-to-make-your-ios-apps-more-secure-with-ssl-pinning
SecPolicyCreateSSL
的含义是什么?SecTrustEvaluate
正在做什么?谢谢
答案 0 :(得分:7)
首先让我们澄清一下Cocoa世界中的术语:
SecPolicyRef
是一种策略,用于在验证证书链时定义规则:要在链中的证书(签名,到期日期等)中检查的内容,以确定证书链是否为有效/可信赖。SecTrustRef
对象是证书链(基本上是SecCertificateRef
的数组)和SecPolicyRef
的组合。此对象表示验证证书链所需的所有内容(证书+策略)。验证服务器的证书链包括两个步骤:
这些步骤由SecPolicyRef
:
SecPolicyCreateBasicX509()
返回的政策包含要检查的所有内容 1 ;这是出于历史原因,但永远不应该使用它。SecPolicyCreateSSL()
返回的政策包含 1和2 的所有规则;这是你必须使用的那个。然后使用SecTrustEvaluate()
验证服务器的SecTrustRef
。结果将根据传递的SecPolicyRef
告诉您服务器的证书链是否可信。
最后,SSL固定意味着在整个过程中添加第三步:
我建议不要编写自己的SSL验证实现(有或没有固定),因为,你可以说,API非常复杂,并且存在巨大的错误,这些错误会使你的App非常不安全。
我曾在图书馆工作,以便轻松进行SSL固定;它可以在https://github.com/datatheorem/TrustKit获得,并负责所有繁重的工作。