我正在尝试固定公钥。我有一个 SecKeyRef
,我想用 SecRSAPublicKeyCopyPublicSerialization
序列化它。 SecRSAPublicKeyCopyPublicSerialization
将在 PKCS#1 中序列化(即 SubjectPublicKeyInfo
),该函数记录在 http://www.opensource.apple.com/source/Security/Security-55163.44/sec/Security/SecRSAKey.c 中.
PKCS#1 是公钥的 ASN.1 编码(即 SubjectPublicKeyInfo
)。该格式适合固定。对于那些不熟悉的人来说,固定是主机的预期证书或公钥的白名单。在识别主机时,它们通常可以互换,但在某些情况下它们不能互换。例如,Google 的公钥是静态的(固定的),但 Google 会轮换“外部”X509 证书。在这种情况下,您将锁定公钥,而不是证书。
SecRSAPublicKeyCopyPublicSerialization
的正确 header 和框架是什么?我包含了 Security.framework
,但缺少 SecRSAPublicKeyCopyPublicSerialization
的声明,并且在链接期间缺少函数。我确实尝试包含 SecRSAKey.h
。
对不起那些糟糕的标签。
杰夫
最佳答案
static OSStatus SecRSAPublicKeyCopyPublicSerialization(SecKeyRef key, CFDataRef* serialized)
是安全框架内部使用的静态函数,你不能从框架外调用这个函数。
看看SecItemExport .此函数可以将 SecKeyRef
转换为不同的外部表示形式。
更新:我错过了 ios在问题中标记。 SecItemExport
仅适用于 OSX 10.7 及更高版本,不适用于 iOS。
在 iOS 上,(我认为)您必须将 key 添加到 KeyChain (SecItemAdd
),然后使用 SecItemCopyMatching()
(使用 kSecReturnData
设置为 YES
) 以检索原始数据。
SecKeyWrapper.m 中的getPublicKeyRef
方法
“CryptoExercise”示例项目可能会有所帮助。
关于iOS:SecRSAPublicKeyCopyPublicSerialization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14747678/