Используя NEVPNManager, как мне установить SharedSecretReference
Поэтому я пытаюсь использовать NEVPNManager для программной настройки VPN. Я застрял в конфиге и действительно смущен тем, что и куда.
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"];
1 ответ
Что важно понять, так это то, что вы даете 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 = persistentRefPassword