转自迷失在天堂 的专栏

前段时间利用数字证书对几种语言(Java、.Net、Php) 调用WS-Security支持的Web Service进行了联调测试,在这个过程中各语言需要的证书格式并不一致,比如说Java我们采用jks,.Net采用pfx和cer,Php则采用pem和cer;本文会对Security证书相关各类文件格式进行一个汇总,并描述各种格式的适用场景;主要分成两类,其一为密钥库文件格式、其二为证书文件格式;

密钥库文件格式【Keystore】

格式 扩展名 描述 特点

JKS

.jks/.ks

【Java Keystore】密钥库的Java实现版本,provider为SUN

密钥库和私钥用不同的密码进行保护

JCEKS

.jce

【JCE Keystore】密钥库的JCE实现版本,provider为SUN JCE

相对于JKS安全级别更高,保护Keystore私钥时采用TripleDES

PKCS12

.p12/.pfx

【PKCS #12】个人信息交换语法标准

1、包含私钥、公钥及其证书
2、密钥库和私钥用相同密码进行保护

BKS

.bks

【Bouncycastle Keystore】密钥库的BC实现版本,provider为BC

基于JCE实现

UBER

.ubr

【Bouncycastle UBER Keystore】密钥库的BC更安全实现版本,provider为BC

 

证书文件格式【Certificate】

格式 扩展名 描述 特点
DER .cer/.crt/.rsa 【ASN .1 DER】用于存放证书 不含私钥、二进制
PKCS7 .p7b/.p7r 【PKCS #7】加密信息语法标准 1、p7b以树状展示证书链,不含私钥
2、p7r为CA对证书请求签名的回复,只能用于导入
CMS .p7c/.p7m/.p7s 【Cryptographic Message Syntax】

1、p7c只保存证书
2、p7m:signature with enveloped data
3、p7s:时间戳签名文件

PEM .pem 【Printable Encoded Message】 1、该编码格式在RFC1421中定义,其实PEM是【Privacy-Enhanced Mail】的简写,但他也同样广泛运用于密钥管理
2、ASCII文件
3、一般基于base 64编码
PKCS10 .p10/.csr 【PKCS #10】公钥加密标准【Certificate Signing Request】 1、证书签名请求文件
2、ASCII文件
3、CA签名后以p7r文件回复
SPC .pvk/.spc 【Software Publishing Certificate】 微软公司特有的双证书文件格式,经常用于代码签名,其中
1、pvk用于保存私钥
2、spc用于保存公钥

证书格式转换工具介绍

目前两大开发平台Java和.Net都提供了相关的证书管理工具,比如Java是keytool,参考http://java.sun.com/javase/6/docs/technotes/tools/windows/keytool.html;.Net为makecert,参考http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cptools/html/cpgrfcertificatecreationtoolmakecertexe.asp
但是两者遵循的标准并不是完全兼容,有很多都是基于自己的实现,所以很多的文件格式并不通用,在实际开发使用过程中我们可能需要进行格式转换,在转换过程中,常见格式的转换可以运用keytool或者是windows证书管理导入导出工具;另外一个很有用的工具就是OpenSSL,首页地址为http://www.openssl.org/,各种格式间的转换示例这里就不提供了,大家可以参考http://www.waasai.com/blog/f/80/archives/2008/1412.htmlhttp://blog.tom.com/eagles125/article/1579.html

这里要提一些注意事项和小工具:

1、Java平台keytool对X.509证书的支持并不一致,6.0版本之前生成的证书都是v1版本的,这在很多应用场合可能会导致一些潜在的问题,但是他还是能够管理v3版本的证书的,从6.0开始keytool支持v3版本的证书生成;
2、Eclipse插件SecureX推荐,这是一个国人贡献的证书生成、管理工具,效果还是不错的,而且可以下载源代码查看,对学习Security方面的编程很有帮助,可以从http://securex.sourceforge.net/updatesite更新,目前版本为2.0,不过好像现在作者也没有更新了;
3、KeyTool IUI工具推荐,这是一个老外编写的Keytool GUI工具,功能大致和SecureX类似,他可以以application或者Java Web Start启动查看,但作者并没有提供源代码下载,首页为http://yellowcat1.free.fr/keytool_iui.html