如何将 SecKey 从应用程序钥匙串移动到共享钥匙串组
How to move SecKey , from app keychain to shared keychain group
我正在我的 iOS 应用程序中生成私钥,用于服务器和应用程序之间的安全通信。
私钥存储在钥匙串中。在新版本的应用程序中,由于通知扩展,我想使用共享钥匙串组。如何将存储在应用程序钥匙串中的私钥传输到共享组钥匙串。下面是我用来生成私钥的代码
func createPrivateKey(withLabel label: String) throws -> SecKey {
let privateKeyAttrs: [String: Any] = [
kSecAttrIsPermanent as String: true,
kSecAttrApplicationLabel as String: label,
kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly,
]
let attributes: [String: Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits as String: 2048,
kSecPrivateKeyAttrs as String: privateKeyAttrs,
]
var error: Unmanaged<CFError>?
guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else {
// swiftlint:disable:next force_unwrapping
throw error!.takeRetainedValue() as Error
}
return privateKey
}
您必须在创建时指定访问组,或使用新的访问组更新现有密钥。完成后,您应该正确设置权利,以便您创建的应用程序和扩展程序可以访问正确的钥匙串访问组。请仔细阅读,因为应用程序组和钥匙串共享组之间只有一线之隔。确保设置正确 (documentation here)。
关于您的查询
let accessGroup = "<# Your Team ID #>.com.example.SharedItems"
let attributes: [String: Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits as String: 2048,
kSecAttrAccessGroup as String: accessGroup,
kSecPrivateKeyAttrs as String: privateKeyAttrs
]
这应该会创建用于为您指定的访问组创建密钥的查询。我想你可以自己弄清楚更新查询。
我正在我的 iOS 应用程序中生成私钥,用于服务器和应用程序之间的安全通信。 私钥存储在钥匙串中。在新版本的应用程序中,由于通知扩展,我想使用共享钥匙串组。如何将存储在应用程序钥匙串中的私钥传输到共享组钥匙串。下面是我用来生成私钥的代码
func createPrivateKey(withLabel label: String) throws -> SecKey {
let privateKeyAttrs: [String: Any] = [
kSecAttrIsPermanent as String: true,
kSecAttrApplicationLabel as String: label,
kSecAttrAccessible as String: kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly,
]
let attributes: [String: Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits as String: 2048,
kSecPrivateKeyAttrs as String: privateKeyAttrs,
]
var error: Unmanaged<CFError>?
guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else {
// swiftlint:disable:next force_unwrapping
throw error!.takeRetainedValue() as Error
}
return privateKey
}
您必须在创建时指定访问组,或使用新的访问组更新现有密钥。完成后,您应该正确设置权利,以便您创建的应用程序和扩展程序可以访问正确的钥匙串访问组。请仔细阅读,因为应用程序组和钥匙串共享组之间只有一线之隔。确保设置正确 (documentation here)。
关于您的查询
let accessGroup = "<# Your Team ID #>.com.example.SharedItems"
let attributes: [String: Any] = [
kSecAttrKeyType as String: kSecAttrKeyTypeRSA,
kSecAttrKeySizeInBits as String: 2048,
kSecAttrAccessGroup as String: accessGroup,
kSecPrivateKeyAttrs as String: privateKeyAttrs
]
这应该会创建用于为您指定的访问组创建密钥的查询。我想你可以自己弄清楚更新查询。