MacOS VPN Ошибка НЕТ Общий секрет был предоставлен Objective-C - PullRequest
0 голосов
/ 25 октября 2018

Я сталкиваюсь с большой проблемой, я сделал VPN для устройств IOS, он находится в магазине приложений, он работает хорошо, однако я сталкиваюсь с проблемой с приложением macos, я использую те же коды. Некоторые коды работают для устройств IOS, однако они неработа для приложения MacOS.

Проблема говорит;Общий секретный ключ VPN предоставлен не был.Проверьте свои настройки и попробуйте повторно подключиться.

Когда я пытаюсь подключиться к vpn.

Код, который я использую для подключения vpn

    [[NEVPNManager sharedManager] loadFromPreferencesWithCompletionHandler: ^(NSError *error) {

    NEVPNProtocolIPSec *p = [[NEVPNProtocolIPSec alloc] init];
    p.serverAddress =ipAddress;
    p.authenticationMethod = NEVPNIKEAuthenticationMethodSharedSecret;
    NSLog(@"vpn connecting to ip %@",ipAddress);


    p.username=@"vpnuser";
    p.sharedSecretReference = [KeyChainHelper load:sharedSecret];
    p.passwordReference = [KeyChainHelper load:password];
   // NSData * data = [self searchKeychainCopyMatching:sharedSecret];

    p.disconnectOnSleep = NO;




    [NEVPNManager sharedManager].protocolConfiguration=p;

    NSMutableArray *rules = [[NSMutableArray alloc] init];
    NEOnDemandRuleConnect *connectRule = [NEOnDemandRuleConnect new];
    [rules addObject:connectRule];
    [[NEVPNManager sharedManager] setOnDemandRules:rules];
    [[NEVPNManager sharedManager] setLocalizedDescription:@"VPN Fire"];


    [[NEVPNManager sharedManager] setEnabled:YES];


    [[NEVPNManager sharedManager] saveToPreferencesWithCompletionHandler: ^(NSError *error) {

        NSLog(@"Save VPN to preference complete");
        if (error) {
            NSLog(@"Save error: %@", error);
        }

        NSError *startError;
        [[NEVPNManager sharedManager].connection startVPNTunnelAndReturnError:&startError];

        delayStart(5)
        NSLog(@"%@",[NEVPNManager sharedManager]);
         NSLog(@"%@",[NEVPNManager sharedManager]);
        delayEnd


        if(startError) {
            NSLog(@"Start error: %@", startError.localizedDescription);
        }

    }];



}];

Здесь я помещаю несколько скриншотов;

enter image description here

enter image description here

enter image description here

enter image description here

1 Ответ

0 голосов
/ 25 октября 2018

Похоже, KeyChainHelper - это оболочка для доступа к цепочке для ключей.Не совсем точно, что возвращает метод KeyChainHelper::load(), но я предполагаю, что это либо стандарт ссылка, либо данные.

NEVPNProtocolIPSec::sharedSecretReference определяется как:

Постоянная ссылка цепочки для ключей на элемент цепочки для ключей, содержащий общий секрет IKE.

Вам необходимо создать элемент цепочки для ключей типа kSecClassGenericPassword для использования в качестве общего секрета и предоставить постоянная ссылка на элемент цепочки для ключей.Постоянная ссылка имеет решающее значение, так как она может быть сохранена на диск или передана между процессами, что требуется для NEVPNManager для доступа к общему секрету и подключения вашей VPN.Аналогично для passwordReference.

Вам потребуется использовать SecItemCopyMatching с типом возврата kSecReturnPersistentRef для достижения этой цели.Ваш KeyChainHelper класс может предоставить метод для возврата постоянной ссылки.

...