常見的數字證書格式
CER后綴的證書文件有兩種編碼:第一種是DER二進制編碼,第二種是:ASE64編碼(也就是.pem)
p7b一般是證書鏈,里面包括1個到多個證書
pfx是指以pkcs#12格式存儲證書的公鑰和相應私鑰。
在Security編程中,有幾種典型的密碼交換信息文件格式:
DER-encoded certificate: .cer, .crt
PEM-encoded message: .pem
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certification Request: .p10
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b
.cer/.crt是用於存放證書,它是二進制形式存放的,不含私鑰。
.pem跟crt/cer的區別是它以Ascii 來表示。
pfx/p12用於存放個人證書/私鑰,他通常包含保護密碼,二進制方式
p10是證書請求
p7r是CA對證書請求的回復,只用於導入
p7b以樹狀展示證書鏈(certificate chain),同時也支持單個證書,不含私鑰。
其中,我介紹如何從p12/pfx文件中提取密鑰對及其長度:
1、首先,讀取pfx/p12文件(需要提供保護密碼)
2、通過別名(Alias,注意,所有證書中的信息項都是通過Alias來提取的)提取你想要分析的證書鏈
3、再將其轉換為一個以X509證書結構體
4、提取里面的項,如果那你的證書項放在第一位(單一證書),直接讀取 x509Certs[0](見下面的代碼)這個X509Certificate對象
5、 X509Certificate對象有很多方法,tain198127網友希望讀取RSA密鑰(公私鑰)及其長度(見 http://www.matrix.org.cn/thread.shtml?topicId=43786&forumId=55& amp;#reply),那真是太Easy了,
X509Certificate keyPairCert = x509Certs[0];
int iKeySize = X509CertUtil.getCertificateKeyLength(keyPairCert);
System.out.println("證書密鑰算法="+keyPairCert.getPublicKey().getAlgorithm());
System.out.println("證書密鑰長度="+iKeySize);
提取了他所需要的信息。
X.509定義了兩種證書:公鑰證書和屬性證書
PKCS#7和PKCS#12使用的都是公鑰證書
PKCS#7的SignedData的一種退化形式可以分發公鑰證書和CRL
一個SignedData可以包含多張公鑰證書
PKCS#12可以包含公鑰證書及其私鑰,也可包含整個證書鏈
PFX文件轉換為JKS文件
使用JWSDP工具包中的工具
安裝J2SE 1.5,下載並運行jdk-1_5_0_09-windows-i586-p.exe 下載並安裝jave web service develop pack, jwsdp-2_0-windows-i586.exe 創建一個新的keystore文件,里面的別名取做TEMP
keytool -genkey -alias temp -keyalg RSA -keystore server.jks
准備好要導入的PFX文件,server.pfx,運行:
C:\Sun\jwsdp-2.0\xws-security\bin\pkcs12import.bat pkcs12import -file server.p12 -alias server -keystore server.jks
查看server.jks 里面的證書記錄:
keytool -list -v -keystore server.jks
JKS文件轉換為PFX文件
通過jks2pfx工具
請下載:JKS2PFX轉換工具。 將壓縮包解開到 c:\jks2pfx 目錄下, 運行以下命令:
JKS2PFX <導出文件名> [Java Runtime的目錄]
備注:
KeyStore文件:指Tomcat保存SSL證書的文件
KeyStore密碼:KeyStore文件對應的密碼
Alias別名: 生成證書CSR時,所起的Alias別名
導出文件名: 准備導出的文件名稱 (不要帶擴展名)
Java Runtime的目錄(可選): 指包含Java.exe和keytool.exe的目錄,如:c:\progra~1\Java\jre1.5.0_06\bin
例如:
JKS2PFX server.jks 123456 tomcat exportfile c:\progra~1\Java\jre1.5.0_06\bin
該命令將server.jks中別名為tomcat的SSL證書導出,運行后將產生3個文件 exportfile.key、exportfile.crt、exportfile.pfx,exportfile.pfx可以導入到微軟的IIS 中,exportfile.key和exportfile.crt 可用於Apache或者OpenSSL兼容的系統。 可以用下面命令查看PFX文件內容:
openssl pkcs12 -info -in exportfile.pfx
PFX文件轉換為X509證書文件和RSA密鑰文件
通過Openssl命令行
openssl pkcs12 -in myssl.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt
總結:
1)P12格式的證書是不能使用keytool工具導入到keystore中的
2)The Sun's PKCS12 Keystore對從IE和其他的windows程序生成的pfx格式的證書支持不太好.
3)P7B證書鏈不能直接導入到keystore,需要將里面的證書導出成cer格式,再分別導入到keystore。