我正在尝试将.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());
如何在内存上保存证书?
答案 0 :(得分:0)
您想要将文件从资源复制到内部存储器。
String string = is.toString();
那不会给你那个文件的内容。相反,您必须创建一个循环,从输入流中读取内容并将其写入输出流。
本网站上有很多例子如何做到这一点。
答案 1 :(得分:0)
Init empty keystore:
KeyStore keyStore = KeyStore.getInstance("BKS");
keyStore.load(null, password);
解析从Web服务获取的证书,检索X509Certificate
和PrivateKey
将其存储在密钥库中:
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();
}