gpt4 book ai didi

objective-c - 来自钥匙串(keychain)的 IKEv2 密码引用

转载 作者:搜寻专家 更新时间:2023-10-31 22:46:19 26 4
gpt4 key购买 nike

我正在尝试使用 NetworkExtension 框架在 Mac OSX 上实现 IKEv2 vpn 连接。每次我弹出窗口输入我的 vpn 连接密码。根据 NEVPNProtocol 规范,可以通过提供存储在钥匙串(keychain)中的密码的持久引用来提供密码。但它不起作用。我在 iOS 中尝试了相同的 IKEv2 配置代码,它运行良好。

我编写了一个示例应用程序来演示我是如何做到的 - https://github.com/kestutisbalt/osx-ikev2-sample

密码如何存储在钥匙串(keychain)中:

class func set(key: String, value: String) {

let query: [NSObject: AnyObject] = [
kSecValueData: value.dataUsingEncoding(NSUTF8StringEncoding)!,
kSecClass: kSecClassGenericPassword,
kSecAttrGeneric: key,
kSecAttrAccount: key,
kSecAttrAccessible: kSecAttrAccessibleAlways,
kSecAttrService: NSBundle.mainBundle().bundleIdentifier!
]

clear(key)
SecItemAdd(query as CFDictionaryRef, nil)
}

如何从钥匙串(keychain)中检索持久引用:

class func persistentRef(key: String) -> NSData? {
let query: [NSObject: AnyObject] = [
kSecClass: kSecClassGenericPassword,
kSecAttrGeneric: key,
kSecAttrAccount: key,
kSecAttrAccessible: kSecAttrAccessibleAlways,
kSecMatchLimit: kSecMatchLimitOne,
kSecAttrService: NSBundle.mainBundle().bundleIdentifier!,
kSecReturnPersistentRef: kCFBooleanTrue
]

var secItem: AnyObject?
let result = SecItemCopyMatching(query, &secItem)
if result != errSecSuccess {
return nil
}

return secItem as? NSData
}

IKEv2 配置:

private func createIKEv2Protocol(host: String,
username: String, password: String) -> NEVPNProtocolIKEv2 {

Keychain.set(username, value: password)
let passwordRef = Keychain.persistentRef(username)
if passwordRef == nil {
log("Failed to query password persistent ref")
}

let config = NEVPNProtocolIKEv2()

config.remoteIdentifier = host
config.serverAddress = host
config.useExtendedAuthentication = true
config.username = username
config.passwordReference = passwordRef

return config
}

最佳答案

Apple 开发者支持回复了我的问题:

您的代码的问题是它试图以不受支持的方式设置 VPN。具体来说,IKEv2 VPN 不支持基于密码的身份验证。 IKEv2 的选项列在 NEVPNIKEAuthenticationMethod 枚举中,即 .Certificate 和 .SharedSecret。`

关于objective-c - 来自钥匙串(keychain)的 IKEv2 密码引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37456633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com