我正在编写一个Android应用程序,它将使用SSL与运行Java的x86 Linux服务器进行通信。我的目标是对传输层进行加密,因此我选择使用SSL。我希望客户端在与Web服务器的每个新连接中生成其自己的密钥。
我收到一个例外:
W/System.err: java.io.IOException: Wrong version of key store.
at com.android.org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi.engineLoad(BcKeyStoreSpi.java:815)
at java.security.KeyStore.load(KeyStore.java:1484)
at com.example.jncy.ssltest.MainActivity$1.run(MainActivity.java:82)
at java.lang.Thread.run(Thread.java:764)
Application terminated.
如果您签出该问题的可接受解决方案,则这是我为客户端和服务器进行的设置以及我如何生成.p12
文件。 SSLServerSocket and certificate setup
从我所做的研究中,我听说Android使用KeyStore的BKS
版本,而服务器上的Java使用pkcs12
版本。我不完全了解发生了什么,但是我想密钥库必须是同一类型? (这是我感到困惑的地方,因为我认为密钥库只是保存证书)
当我尝试在Android中加载pkcs12时,仍然会遇到相同的异常。
KeyStore trustStore = KeyStore.getInstance("pkcs12");
Log.d("TYPE", KeyStore.getDefaultType());
InputStream tstore = getResources().openRawResource(idcert);//MainActivity.class.getResourceAsStream("/"+"servercert.p12");
trustStore.load(tstore, "abc123".toCharArray());
tstore.close();