Leer en el archivo PKCS12 / P12 Client Cert para la aplicación de Android

Estoy tratando de usar un Certificado de Cliente dentro de mi aplicación de Android para asegurar la comunicación HTTPS solo con personas que usan la aplicación o tienen el certificado.

Tengo el certificado en mi carpeta res / raw. Y Android Studio lo ve cuando empiezo a escribir "R.raw".

Sin embargo, cuando uso cualquiera de los siguientes códigos, la variable vuelve a tener un valor "nulo":

FileInputStream fis = null;
fis = (FileInputStream) getClass().getResourceAsStream(String.valueOf(R.raw.clientcert2));

o

InputStream fis = getClass().getResourceAsStream("raw/clientcert2.p12");

o

InputStream fis = null;
fis= (InputStream) getResources().openRawResource(R.raw.clientcert2);

El último realmente bloquea la aplicación, lo que me hace pensar que ni siquiera está cerca de corregir. Se bloquea con el siguiente error:

09-10 08:13:06.677  10310-10310/com.example.agenice.clientcert E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.agenice.clientcert, PID: 10310
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.agenice.clientcert/com.example.agenice.clientcert.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.getResources(ContextWrapper.java:89)
at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
at com.example.agenice.clientcert.GetCert.getThisCert(MainActivity.java:92)
at com.example.agenice.clientcert.MainActivity.onCreate(MainActivity.java:58)
at android.app.Activity.performCreate(Activity.java:5231)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)

Como nota al margen: sí, sé que si alguien obtiene el APK, simplemente puede descomprimir el paquete y obtener el certificado. Es por eso que esta no es la forma final de la aplicación. Es solo el primer paso en el proceso. En la versión iOS de la aplicación, pude importar el archivo p12, convertir el binario en una cadena, exportar la cadena al registro y luego usarla como certificado. Esto eliminó la necesidad de agregar el archivo de certificado a la aplicación. Entonces, ahí es donde se dirige todo esto. Si alguien tiene una manera rápida y fácil de hacerlo, sería genial. Por ahora, todo lo que necesito es descubrir por qué esta parte no está funcionando.

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta