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