I'm trying to install .p12 certificate programmatically which is created for working with ARC GRID networks.
It works when I tried to install this cert by SETTINGS > SECURITY > INSTALL CERTIFICATE. Surely i was asked to enter my password. So main question is how with easiest way to install certificate programatically.
Function that I saw at someone example and try to use:
public void installCertificate(String myCert) {
try {
FileInputStream fis = new FileInputStream(myCert);
byte[] keychain = new byte[fis.available()];
fis.read(keychain);
Intent installIntent = KeyChain.createInstallIntent();
X509Certificate x509 = X509Certificate.getInstance(keychain);
installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded());
installIntent.putExtra(KeyChain.EXTRA_NAME, myCert);
startActivityForResult(installIntent, 1);
}
catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "IOException: " + e.getMessage(), Toast.LENGTH_SHORT).show();
} catch (CertificateEncodingException e) {
e.printStackTrace();
Toast.makeText(this, "CertificateEncodingException: " + e.getMessage(), Toast.LENGTH_SHORT).show();
} catch (javax.security.cert.CertificateException e) {
e.printStackTrace();
Toast.makeText(this, "javax.security.cert.CertificateException: " + e.getMessage(), Toast.LENGTH_SHORT).show();
}
}
And onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if ((requestCode == FILE_CHOOSER) && (resultCode == RESULT_OK)) {
String fileSelected = data.getStringExtra(com.orleonsoft.android.simplefilechooser.Constants.KEY_FILE_SELECTED);
installCertificate(fileSelected);
pathToFile.setText(fileSelected);
Toast.makeText(this, R.string.pasirinktasFailas + fileSelected, Toast.LENGTH_SHORT).show();
}
}
And there is logcat, no red errors but some blue:
04-24 08:45:25.490 2654-2654/? I/FILE CHOOSER﹕ result ok
04-24 08:45:25.546 2654-2654/? W/System.err﹕ javax.security.cert.CertificateException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: com.android.org.conscrypt.OpenSSLX509CertificateFactory$ParsingException: java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at javax.security.cert.X509Certificate.getInstance(X509Certificate.java:94)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at javax.security.cert.X509Certificate.getInstance(X509Certificate.java:213)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at com.example.dev.nordugrid.EsamoRegistravimas.installCertificate(EsamoRegistravimas.java:69)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at com.example.dev.nordugrid.EsamoRegistravimas.onActivityResult(EsamoRegistravimas.java:90)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.app.Activity.dispatchActivityResult(Activity.java:6139)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.app.ActivityGroup.dispatchActivityResult(ActivityGroup.java:126)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.app.ActivityThread.deliverResults(ActivityThread.java:3535)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.app.ActivityThread.handleSendResult(ActivityThread.java:3582)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.app.ActivityThread.access$1300(ActivityThread.java:144)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1327)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.os.Looper.loop(Looper.java:135)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5221)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
04-24 08:45:25.546 2654-2654/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:372)
04-24 08:45:25.547 2654-2654/? W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
04-24 08:45:25.547 2654-2654/? W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
04-24 08:45:25.592 2654-2669/? W/EGL_emulation﹕ eglSurfaceAttrib not implemented
04-24 08:45:25.593 2654-2669/? W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa5b7fba0, error=EGL_SUCCESS
04-24 08:45:25.716 2654-2669/? W/EGL_emulation﹕ eglSurfaceAttrib not implemented
04-24 08:45:25.716 2654-2669/? W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa5b7fb60, error=EGL_SUCCESS
04-24 08:45:25.860 2654-2669/? D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa6e85300 (ListView) with handle 0xa6067f60
04-24 08:45:25.973 933-933/? W/SurfaceFlinger﹕ couldn't log to binary event log: overflow.
04-24 08:45:27.639 2654-2669/? W/EGL_emulation﹕ eglSurfaceAttrib not implemented
04-24 08:45:27.639 2654-2669/? W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa5b7fb60, error=EGL_SUCCESS
04-24 08:52:00.012 1234-1252/? I/ProcessStatsService﹕ Prepared write state in 1ms
04-24 08:53:47.520 1234-1251/? I/UsageStatsService﹕ User[0] Flushing usage stats to disk
04-24 08:54:28.775 1234-1401/? I/ActivityManager﹕ Delay finish: com.google.android.gms/.checkin.EventLogService$Receiver
04-24 08:54:28.786 1833-2687/? I/EventLogService﹕ Aggregate from 1429863868353 (log), 1429863868353 (data)
04-24 08:54:28.817 1676-2035/? D/GCM﹕ Message class com.google.f.a.a.i
04-24 08:54:29.025 1234-1508/? I/ActivityManager﹕ Resuming delayed broadcast
Maybe this java function code is not good for .p12 certificate?