Android Java 使用X509Certificate解析x509 v3证书中文问题
代码如下:
import java.io.*;
import java.security.cert.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class CertManager
{
public static void showCertInfo()
{
try
{
//读取证书文件
File file = new File("/data/data/com.example.helloworld/files/test.cer");
InputStream inStream = new FileInputStream(file);
//创建X509工厂类
CertificateFactory cf = CertificateFactory.getInstance("X.509");
//创建证书对象
X509Certificate oCert = (X509Certificate)cf.generateCertificate(inStream);
inStream.close();
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy/MM/dd");
String info = null;
//获得证书版本
info = String.valueOf(oCert.getVersion());
System.out.println("证书版本:"+info);
//获得证书序列号
info = oCert.getSerialNumber().toString(16);
System.out.println("证书序列号:"+info);
//获得证书有效期
Date beforedate = oCert.getNotBefore();
info = dateformat.format(beforedate);
System.out.println("证书生效日期:"+info);
Date afterdate = oCert.getNotAfter();
info = dateformat.format(afterdate);
System.out.println("证书失效日期:"+info);
//获得证书主体信息
info = oCert.getSubjectDN().getName();
System.out.println("证书拥有者:"+info);
//获得证书颁发者信息
info = oCert.getIssuerDN().getName();
System.out.println("证书颁发者:"+info);
//获得证书签名算法名称
info = oCert.getSigAlgName();
System.out.println("证书签名算法:"+info);
byte[] byt = oCert.getExtensionValue("1.2.86.11.7.9");
String strExt = new String(byt);
System.out.println("证书扩展域:" + strExt);
byt = oCert.getExtensionValue("1.2.86.11.7.1.8");
String strExt2 = new String(byt);
System.out.println("证书扩展域2:" + strExt2);
}
catch (Exception e)
{
System.out.println("解析证书出错!");
}
}//end showCertInfo
}
以下是在PC输出结果:
证书版本:3
证书序列号:4f2ce7941a87410a9db9f9c30477538a
证书生效日期:2011/07/12
证书失效日期:2013/07/11
证书拥有者:CN=测试证书-证书解析, O=河南CA, C=CN, OU=技术中心, L=郑州, ST=河南证书颁发者:CN=HNCA, O=HNCA, L=ZZ, ST=HN, C=CN
证书签名算法:SHA1withRSA
证书扩展域:1�410522123456789
证书扩展域2: KZE123456
其中证书拥有者中文显示正常,改在Android下显示乱码,查了很多资料,都未能解决,请大侠帮帮,谢谢!