【发布时间】:2016-01-26 07:54:08
【问题描述】:
我想在 swift 中使用 ssl 公钥固定,我阅读了很多如何做到这一点的示例,最后想我找不到的是如何比较 SecKey 对象格式的两个公钥。 示例:
let serverPublicKey = SecTrustCopyPublicKey(secTrust) /*return SecKey object from actual SecTrust*/
let clientPublicKey = getLocalPublicKeyFromDer() /*return SecKey from .der local*/
如何比较它们?现在我这样做并且它有效:
if(serverPublicKey! as AnyObject).isEqual(clientPublicKey){
/*Key is the same, pinning OK!*/
}
在 gitHub 上找到它:https://github.com/teamcarma/IOS-AlamofireDomain/blob/master/Source/ServerTrustPolicy.swift
但是转换为 AnyObject 是个好主意吗?如何在强制转换的 SecKey 上使用 isEqual?任何人都可以解释我吗?
ps。 另一个想法是从 SecKey 获取 base64 - 我尝试过,它也可以工作,但它需要 KeyChain 临时操作并且看起来不专业。
【问题讨论】:
-
在这里找到了类似的解决方案:stackoverflow.com/a/29234388/117733 也转换为 AnyObject 并进行比较。对我来说似乎很好。基于这里的文档developer.apple.com/reference/security/seckey,它是一个对象。所以投射到
AnyObject应该总是有效的。