首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NEVPNManager VPN配置SharedSecret错误

NEVPNManager VPN配置SharedSecret错误
EN

Stack Overflow用户
提问于 2018-05-15 00:51:12
回答 1查看 366关注 0票数 0

我想与我的VPN服务器建立VPN连接。我从数字海洋安装了VPN服务器。

我想通过使用我的VPN连接设置,使用objective-C为IOS创建VPN应用程序。

这里我遇到了一个问题:没有提供VPN共享密钥。

在这里我使用了代码

代码语言:javascript
复制
  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

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



        NEVPNProtocolIPSec *p = [[NEVPNProtocolIPSec alloc] init];
        p.serverAddress =@"178.62.78.101";
        p.authenticationMethod = NEVPNIKEAuthenticationMethodSharedSecret;
        p.useExtendedAuthentication = YES;

        NSString *secret = @"gfJL$$";
        NSData *secretData = [secret dataUsingEncoding:NSUTF8StringEncoding];


        p.sharedSecretReference=secretData;
        p.localIdentifier=@"londra1";
        p.username=@"root";
        p.passwordReference=[[SSKeychain passwordForService:@"2eee9fa59" account:@"2eee9fa5"] dataUsingEncoding:NSUTF8StringEncoding];
        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"];

        [[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];
        if(startError) {
            NSLog(@"Start error: %@", startError.localizedDescription);
        }

    }];
    return YES;
}
EN

回答 1

Stack Overflow用户

发布于 2018-10-25 20:51:29

您正在将sharedSecretReference设置为NSData,但这与其定义冲突。

NEVPNProtocolIPSec::sharedSecretReference定义为:

对包含IKE共享密钥的密钥链项的永久密钥链引用。

您需要创建一个kSecClassGenericPassword类型的密钥链项作为共享密钥,并为该密钥链项提供一个持久引用。持久引用在这里至关重要,因为它可以存储到磁盘或在进程之间传递,这是NEVPNManager访问共享密钥和连接您的虚拟专用网络所必需的。我怀疑,尽管passwordReference似乎是由密钥链项设置的,但它可能也不会返回持久引用。

您需要使用具有返回类型kSecReturnPersistentRefSecItemCopyMatching来实现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50335351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档