本文首先感谢 Apple 开发者论坛的eskimo1,他是我见过的最热心肠的人,对任何人他都不吝于给予无私帮助。
服务器生成PKCS12证书库,并通过servlet导出为DER客户端证书(含一个密钥和一个证书)。iPhone从服务器下载证书后,如何进行验证?
一、生成证书
假设密钥库为dlt.p12,库密码ipcc@95598,有效期1天,则命令为:
keytool -genkey -v-alias root -keyalg RSA -storetype PKCS12 -keystore dlt.p12 -dname "CN=www.handtimes.com,OU=ipcc,O=云电同方,L=昆明,ST=云南,C=中国"-storepass ipcc@95598 -keypass ipcc@95598
生成客户端用的证书:
keytool -genkey -v-alias p12client -keyalg RSA -storetype PKCS12 -keystore dlt.p12 -dname"CN=www.handtimes.com,OU=ipcc,O=云电同方,L=昆明,ST=云南,C=中国" -storepass ipcc@95598-keypass 123456 -validity 1
要查看已生成的证书,用下面的命令:
keytool -list -v-alias p12client -keystore dlt.p12 -storepass ipcc@95598 -storetype PKCS12
或者:
keytool -list -v-keystore IPCCCA –dlt.p12 ipcc@95598 -storetype PKCS12
如果需要将p12证书导出为.cer格式,可以使用命令:
keytool -export-alias p12client -keystore dlt.p12 -storetype PKCS12 -storepass ipcc@95598 -rfc-file p12.cer
查看.cer文件:
keytool -printcert-v -file /Users/kmyhy/Desktop/client.cer
如果需要将keystore中的私钥导出为.p12格式:
Keytool.exe-importkeystore -srckeystore IPCCCA -srcstoretype jks -srcstorepass ipcc@95598 -srcaliasp12client -destkeystore dltclient.p12-deststoretype pkcs12 -deststorepass ipcc@95598 -destkeypass 123456 –validity 3
注意,keytool用的是jdk1.6提供的版本。此时命令提示忽略用户输入的destkeypass密码:
重新输入密码123456,回车,将在用户主目录下生成dltclient.p12文件。
查看dltclient.p12内容:
keytool.exe -list-keystore dltclient.p12 -storepass ipcc@95598 -storetype pkcs12
可以看到如下输出:
可以看到其中包含了证书和私钥,并且其认证指纹是和IPCCCA中的一模一样的。
一、提供证书下载
先把生成的p12证书库dlt.p12放到服务器目录下。
新建一个Servlet:GetP12Cert。
public class GetP12Cert extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final int max_days=1;
/**
* @see HttpServlet#HttpServlet()
*/
public GetP12Cert() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequestrequest, HttpServletResponse response)
*/
protected void doGet(HttpServletRequestrequest, HttpServletResponse response) throws ServletException, IOException {
String filename="C://Documents andSettings//Administrator//dlt.cer";
String pass="ipcc@95598";
Pkcs12Manager man=null;
String alias="p12client";
String keypass="123456";
try{
man=