因此,我试图使用NEVPNManager设置我的虚拟专用网编程。我被困在配置上了,真的搞不懂到底是怎么回事。
sharedSecretReference真的把我绊倒了。我在其他地方见过一些东西,上面说我需要使用钥匙链,但是我要怎么用,为什么要用。我可以连接到这个VPN与大约6个选项使用它手动,所以为什么我需要这么多在这里。
如果你看到我可能做错了什么,请告诉我。这是我目前使用的确切代码
NEVPNProtocolIPSec *p = [[NEVPNProtocolIPSec alloc] init];
p.username = [config objectForKey: @"username"];
p.passwordReference = [config objectForKey: @"password"];
p.serverAddress = [config objectForKey: @"ip"];
p.localIdentifier = [config objectForKey: @"vpn"];
p.remoteIdentifier = [config objectForKey: @"vpn"];
p.useExtendedAuthentication = NO;
p.authenticationMethod = NEVPNIKEAuthenticationMethodSharedSecret;
p.disconnectOnSleep = NO;
p.sharedSecretReference = [config objectForKey: @"psk"];发布于 2017-10-28 22:04:43
需要理解的是,您为NEVPNManager提供了一个可以用来启动VPN连接的配置,即使您的应用程序处于非活动状态(通过设置应用程序)。VPN管理器需要能够从密钥链中获取安全数据(共享秘密或密码),而无需通过应用程序。为此,它使用对密钥链中的秘密的持久引用,而不是秘密本身。如果使用像KeychainAccess这样的库,很容易获得这个引用并设置它:
let keychain = Keychain()
let persistentRefSharedSecret = keychain[attributes: "my_shared_secret"].persistentRef
let persistentRefPassword = keychain[attributes: "my_password"].persistentRef
...
p.sharedSecretReference = persistentRefSharedSecret
p.passwordReference = persistentRefPasswordhttps://stackoverflow.com/questions/46944843
复制相似问题