在内部存储上保存PFX证书

时间:2014-06-30 10:44:20

标签: java android ssl certificate pfx

我正在尝试将.PFX证书保存到我的应用程序的Internar Storage中。

当我从asset或raw获得de .pfx时,获得的InputStream很好,并且工作正常。但是,如果我将此InputStream存储在Internar Storage(或Sharedprefences)上,则.PFX无效...并在加载密钥库时出现此错误:

java.io.IOException:stream不代表PKCS12密钥库

此代码有效,但我需要将证书存储在内存中,而不是从资产中获取...:

InputStream is = AppConstants.appContext.getResources().openRawResource(R.raw.XXXX);

这是保存.PFX的代码:

InputStream is = AppConstants.appContext.getResources().openRawResource(R.raw.XXXX);
        String filename = "XXXX";
        String string = is.toString();
        FileOutputStream outputStream;
        try {
            outputStream = AppConstants.appContext.openFileOutput(filename, AppConstants.appContext.MODE_PRIVATE);
            outputStream.write(string.getBytes());
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

这是加载存储的.PFX的代码:

String filename = Uri.parse(PFX_FILE).getLastPathSegment();
        File file = File.createTempFile(filename, null, AppConstants.appContext.getCacheDir());
keyStore.load(new FileInputStream(file), "xxxx".toCharArray());

如何在内存上保存证书?

2 个答案:

答案 0 :(得分:0)

您想要将文件从资源复制到内部存储器。

String string = is.toString();

那不会给你那个文件的内容。相反,您必须创建一个循环,从输入流中读取内容并将其写入输出流。

本网站上有很多例子如何做到这一点。

答案 1 :(得分:0)

Init empty keystore:

KeyStore keyStore = KeyStore.getInstance("BKS");
keyStore.load(null, password);

解析从Web服务获取的证书,检索X509CertificatePrivateKey

将其存储在密钥库中:

 keyStore.setKeyEntry(alias, privateKey, password, new X509Certificate []{certificate});

保存keyStore:

OutputStream outputStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
keyStore.store(outputStream, password);

之后,当您需要保存的密钥库时,请从文件中填写:

InputStream in;
try {
    in = context.openFileInput(filename);
    try {
        keyStore.load(in, password);
    } finally {
        in.close();
    }