最近在搞一个项目,其中通讯方式用的是https。用了两种方式读取的证书,适应不同情况的需求,下面就简单说下。
方式一:在工程中assets文件夹下放入证书文件,直接复制粘贴就好。在程序中读取:
1、创建AssetManager,
AssetManager assetManager = context.getAssets();
2、用输入流读取文件
InputStream inputStream = assetManager.open("cacert.pem");
也可以不用创建AssetManager,直接用就好,如下:
InputStream inputStream = context.getAssets().open("cacert.pem");
方式二:把证书文件导入机器中,通过文件形式读取。
1、导入证书方法:adb push D:\证书所在路劲\cacert.pem data/data/工程包名/files/
2、得到证书所在的路劲:
String CACERT_PATH = xxx.getFilesDir() + File.separator + "cacert.pem";
//getFilesDir():创建路径;File.separator:系统分隔符,保证在任何系统下都不会出错。
3、通过路劲,读取证书:
File file = new File(CACERT_PATH);
if (file.exists()) {
inputStream = new FileInputStream(file);
}
以上所述就是证书导入Android工程的方法。
下面代码是读取证书中的具体内容:
InputStream inputStream = null;
/******************通过日志查看证书内容可以验证证书是否导入*************************
InputStreamReader isr = null;
BufferedReader br = null;
StringBuffer sb = new StringBuffer();
try {
inputStream = assetManager.open("cacert-payplus.ubin.top.pem");
isr = new InputStreamReader(inputStream);
br = new BufferedReader(isr);
sb.append(br.readLine());
String line = null;
while ((line = br.readLine()) != null) {
sb.append("\n" + line);
}
br.close();
isr.close();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (br != null) {
br.close();
}
if (isr != null) {
isr.close();
}
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
//return sb.toString();
Log.d("zfr_证书===",sb.toString());
*******************************************/
注:如有问题可以回复,看到第一时间分析解决,码农不易,感觉对您有用,帮助到您,可否打赏一杯可乐,在此谢过诸位,愿诸君终成大神,前程似锦~~~