Ios 如何使用swift从PKCS#12文件中提取证书和私钥PEM字符串
我有一个用例,用户提供一个PKCS#12文件及其密码作为输入,我需要证书和私钥的PEM字符串 我已经设法使用p12创建了一个Ios 如何使用swift从PKCS#12文件中提取证书和私钥PEM字符串,ios,swift,Ios,Swift,我有一个用例,用户提供一个PKCS#12文件及其密码作为输入,我需要证书和私钥的PEM字符串 我已经设法使用p12创建了一个SecIdentity,其文档显示: SecIdentity对象包含一个SecKey对象和一个关联的SecCertificate对象 因此,我相信我走的是正确的道路,但我找不到从这个SecIdentity中提取SecKey和SecCertificate的方法 我还没有找到从SecKey或SecCertificate获取PEM字符串的方法,但这只是最后一步 这是我用来创建标
SecIdentity
,其文档显示:
SecIdentity对象包含一个SecKey对象和一个关联的SecCertificate对象
因此,我相信我走的是正确的道路,但我找不到从这个SecIdentity
中提取SecKey
和SecCertificate
的方法
我还没有找到从SecKey
或SecCertificate
获取PEM字符串的方法,但这只是最后一步
这是我用来创建标识的代码:
let key: NSString = kSecImportExportPassphrase as NSString
let options: NSDictionary = [key : p12Password]
var rawItems: CFArray?
let p12Data = try! Data(contentsOf: p12FileUrl)
let data = p12Data! as NSData
let cfdata = CFDataCreate(kCFAllocatorDefault, data.bytes.assumingMemoryBound(to: UInt8.self), data.length)!
let result: OSStatus = SecPKCS12Import(cfdata, options, &rawItems)
if result == errSecSuccess {
let items = rawItems! as! [[String: Any]]
let firstItem = items[0]
let identity = firstItem[kSecImportItemIdentity as String] as! SecIdentity
}
--更新--
我取得了一些进展,并设法以DER格式提取证书(到目前为止我还没有尝试将其转换为PEM-我相信这应该很容易),但我仍然不知道如何获取私钥
if result == errSecSuccess {
let items = rawItems! as! [[String: Any]]
let firstItem = items[0]
let identity = firstItem[kSecImportItemIdentity as String] as! SecIdentity
var cert: SecCertificate?
SecIdentityCopyCertificate(identity, &cert)
var certDer = SecCertificateCopyData(cert!) //DER format
var key: SecKey?
SecIdentityCopyPrivateKey(identity, &key)
let keyDict = SecKeyCopyAttributes(key!) //Not sure what we can find here
}