I want to make a https request.
I use bouncycastle to generate the keystore like this :
keytool -importcert -trustcacerts -alias ludevCA -file lu_dev_cert.crt -keypass mypass -keystore keystore.bks -storepass mypass -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk15on-146.jar
And the keylist command return a correct value.
But when i do :
KeyStore ks = KeyStore.getInstance("BKS");
InputStream in = getResources().openRawResource(R.raw.keystore);
ks.load(in, "mypass".toCharArray());
i have a error :
wrong version of keystore
I tried to use several version of bouncycast, but the result is the same. I also tried to define keysize 1024, but nothing change.
Any ideas ?
Solution is Here , able to remove the version prolem
Creating BKS file for android client
Software installation details required to create BKS file:
Download Keystore Explorer software from link http://keystore-explorer.sourceforge.net/
Download UnlimitedJCEPolicyJDK7 from http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
Extract zip and copy US_export_policy and local_policy to your C:/programes file/java/jre7/lib/security folder.
install Keystore Explorer software.
Steps to Generate BKS file: (Need CA file , Certificate file , Key File and .P12 i.e.PKCS file(if available).
1) Creating Trust file using CA .crt file using keystore software.
Steps:
Open software
Go File->New->select .BKS from the wizard To import CA certificate file Go Tool->Import trusted certificate ->select CA .crt file -> entert password->(It will throwa an exception if certificate is self sign) import file forcefully.
4.Save file with .bks extension.
2) Creating Key file using .P12 file using keystore software
Steps
Open software Go File->New->select .BKS from the wizard
Import >p12 file Go Tool -> Import key pair -> select PKCS #12 from wizard - >enter decription password for file and brows file -> Enter alise name(if want to change else can keep as it is) ->Enter new password
Save file with .bks extension.
3) Creating Key file using if .P12 is not available file using keystore software
Steps
Open software
Go File->New->select .BKS from the wizard Import >p12 file Go Tool -> Import key pair -> select OpenSSL from wizard - >unchecked decription password for file ,brows .key and .crt (Certificate file not CA) file -> Enter alise name(if want to change else can keep as it is) ->Enter new password
Save file with .bks extension.
Copy both file in res/raw folder(Both BKS file are compulsarry).
Code:
Use a of them.
KeyStore.getInstance("BKS"); KeyStore.getInstance("PKCS12");
I'm posting this answer to provide a cmdline-version for converting a .pkcs12-File to keystore.bks
What is needed:
If you don't know how to generate a .PKCS12-File check out these sites:
For this Sample I use jetty.pkcs12 as source. The command generates: keystore.bks /usr/local/share/java/portecle-1.9/ is the path where I've installed the downloaded Portecle-Tool (.ZIP)
Now you can use the BKS-Keystore under Android
Thanks to the prev posting I was able find a solution and to provide this cmd. Hope it helps someone!
Have a Look on it Android: Trusting SSL certificates
And use this version when creating your keystore: Version 1.46 found here
May it Helps...
Finally i used a graphic editor (KeyStore Explorer) under Windows and it's working.
Maybe the error was caused by Java/Mac version problems
No need to do every thing again !!!
You need to change the type of the keystore, from BKS to BKS-v1 (BKS-v1 is an older version of BKS). Because the BKS version changed as said here
There is another solution, that is much much easier:
Using Portecle:
You may use KeyStore Explorer
The new file will be encoded with BKS-v1 and will not show anymore the error....
Note: Android works with differents BKS version: for instance, API 15 will require BKS-1 contrary to API 23 which require BKS, so you may need to put both files in your app.
Note 2: You can use this code: