4

我使用 NetworkExtension 框架来创建一个应用程序,它通过 NEVPNProtocolIKEv2 连接到 VPN 服务器。

经过研究,我找到了有关使用 NetworkExtension 框架的教程,并尝试遵循它。(http://ramezanpour.net/post/2014/08/03/configure-and-manage-vpn-connections-programmatically-in-ios-8/

但是,当我配置这个协议的 identityData 时,我卡住了。这是m代码:

self.vpnManager.loadFromPreferencesWithCompletionHandler { [unowned self] (error) in
if error != nil {
    printError("\(error?.errorDescription)")
    return
}

let p = NEVPNProtocolIKEv2()
p.username = server.userName
p.serverAddress = server.serverUrl

// Get password persistent reference from keychain
self.createKeychainValue(server.password, forIdentifier: KeychainId_Password)
p.passwordReference = self.searchKeychainCopyMatching(KeychainId_Password)

p.authenticationMethod = NEVPNIKEAuthenticationMethod.None
self.createKeychainValue(kVPNsecret, forIdentifier: KeychainId_PSK)
p.sharedSecretReference = self.searchKeychainCopyMatching(KeychainId_PSK)


// certificate
p.identityData = ??????

p.useExtendedAuthentication = true
p.disconnectOnSleep = false

self.vpnManager.`protocol` = p
self.vpnManager.localizedDescription = server.serverName

self.vpnManager.saveToPreferencesWithCompletionHandler({ [unowned self] (error) in
    if error != nil {
        printError("Save config failed " + error!.localizedDescription)
    }
    })

}

在教程中,p.identityData 是从 P12 文件加载的 NSData。但我只有一个字符串调用:server.certificate

此 server.certificate 具有这样的值

"-----BEGIN CERTIFICATE-----\nMIIEdDCCA1ygAwIBAgIBADANBgkqhki......1iEtCZg7SAlsBiaxpJzpZm5C6OifUCkUfZNdPQ==\n-----END CERTIFICATE-----\n"

这是一个非常长的字符串,调用 x509Certificate... 或类似的东西,我不记得了。


我发现一个库支持将字符串写入文件 p12,它是“openssl”。

但是演示代码是Objective-C。我一直在尝试将此代码移植到 Swift,但这太难了。(演示代码:iOS:如何以编程方式从应用程序中的私钥和 x509 证书创建 PKCS12(P12)密钥库?


最后,我只有一个字符串证书,我想为我的应用程序配置 p.identityData。我怎么做?

4

0 回答 0