I am running the below code to open a p12 file and convert it's 
certificates to x509.  For the linked p12 file, I get the below exception 
(have tried on multiple android OS builds).  This conversion works properly 
when I run similar Java code.  Also, on desktop applications like Internet 
explorer, and I can convert it's certificates to x509.  

Is due to java.security implementation on Android, or is my code incorrect?

    java.security.cert.CertificateException: 
org.apache.harmony.security.asn1.ASN1Exception: ASN.1 boolean: wrong 
content at [4]. DER allows only 0x00 or 0xFF values

https://www.dropbox.com/s/al1415o4kdycmqs/test.p12

    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.security.KeyStore;
    import java.security.KeyStoreException;
    import java.security.NoSuchAlgorithmException;
    import java.security.cert.Certificate;
    import java.security.cert.CertificateException;
    import java.security.cert.CertificateFactory;
    import java.security.cert.X509Certificate;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    
    
    public class Temp extends Activity 
    {
    protected void onCreate(Bundle state)
    {
    super.onCreate(state);
    
    try
    {
    openAndConvert(new File("/sdcard/test.p12"), "11111111", 
"mglobetrotter's cryptovision id");
    }
    catch (Exception e)
    {
    Log.e("", Log.getStackTraceString(e));
    }
    
    }
    
    private void openAndConvert(File file, String password, String alias) 
throws KeyStoreException, CertificateException, NoSuchAlgorithmException, 
IOException
    {
    KeyStore keyStore = openKeyStore(file, new String(password));
    
    Certificate[] certs = keyStore.getCertificateChain(alias);
    X509Certificate[] certChain = convertCertificates(certs);
    
    }
    
    private X509Certificate[] convertCertificates(Certificate[] certsIn) 
throws CertificateException
    {
    X509Certificate[] certsOut = new X509Certificate[certsIn.length];
    
    for (int iCnt = 0; iCnt < certsIn.length; iCnt++)
    {
    CertificateFactory cf = CertificateFactory.getInstance("X.509");
    ByteArrayInputStream bais = new 
ByteArrayInputStream(certsIn[iCnt].getEncoded());
    certsOut[iCnt] =  (X509Certificate) cf.generateCertificate(bais);
    }
    
    return certsOut;
    }
    
    private KeyStore openKeyStore(File file, String password) throws 
KeyStoreException, NoSuchAlgorithmException, CertificateException, 
IOException
    {
    KeyStore keyStore = KeyStore.getInstance("PKCS12");
     
    FileInputStream ksStream = new FileInputStream(file);
    keyStore.load(ksStream, password.toCharArray());
    ksStream.close();
    
    return keyStore;
    }
    }

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to