转自
前段时间利用数字证书对几种语言(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.html、http://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;