Not able to retrieve private key

Hi,

I am building VPN client with Packet Tunnel Provider for macOS. The VPN profile configured by Apple Configurator 2 uses certificate p12 file as user authentication for connection, the profile installed on my Mac as well as the certificate was imported to keychain.

The VPN extension is called once I try to connect the vpn, but I am not able to retrieve the private key with persistent reference of my VPN keychain item which comes within NETunnelProviderProtocol object. Below are things I did.

1. Generate p12 file with certificate and RSA private key.

openssl pkcs12 -export -out client.p12 -inkey privateKey.key -in certificate.crt -certfile CACert.crt

2. Try to retrieve the private key with persistent reference in NETunnelProviderProtocol object in Packet Tunnel Provider extension.

SecIdentityRef identity_ref = NULL;

const void *keys[] = { kSecClass, kSecReturnRef, kSecValuePersistentRef };

const void *values[] = { kSecClassIdentity, kCFBooleanTrue, persistent_ref };

CFDictionaryRef dict = CFDictionaryCreate(NULL, keys, values, 3, NULL, NULL);

if ( SecItemCopyMatching(dict, &identity_ref) == errSecSuccess)

{

SecItemImportExportKeyParameters params = {};

params.version = SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION;

params.flags = kSecKeySecurePassphrase;

params.passphrase = CFStringCreateWithCString(kCFAllocatorDefault, "", kCFStringEncodingASCII);

status = SecItemExport(identity, kSecFormatPKCS12,0, &params, &exportResult);// error, not able to get the private key

}

Addictionly I try to use SecItemCopyMatching to retrieve the private key, I can get just only 96 bytes back, obviously, it is not correct.


There should be something wrong with my code, please give me help.


Thanks!

Does anybody know this? Any help I appreciated!

Hi, were you able to retrieve the key? We are running into a similar issue.

We are running into a similar issue.

Are you building a Network Extension provider? ’cause you didn’t mention that on your other thread and it’s kinda important (-:

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"
Not able to retrieve private key
 
 
Q