Используя 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
Другие вопросы по тегам