每个人都有很多种形式的身份证明,如身份证、驾驶证、护照等,这些证件都是由相应的签发机构盖章认证的,可信程度高,很难进行伪造,并且随着科技的发展,还可以通过指纹、视网膜等生物特征进行认证。
数字证书又称为电子证书,类似于日常生活中的身份证,也是另外一种形式的身份认证,用于标识网络中的用户身份。数字证书集合了多种密码学的加密算法,证书自身带有公钥信息,可以完成相应的加密、解密操作,同时还有自身信息的数字签名,
可以鉴别整合证书的办法机构,以及证书内容的完整性。由于证书本身包含有用户的认证信息,因此可以作为用户身份识别的依据。1通常数字证书会包含如下内容:
- 对象的名称(人、服务器、组织)
- 证书过期时间
- 证书颁发机构
- 证书颁发机构对证书信息的数字签名
- 签名算法
- 对象的公钥
1、X.509
4、证书管理
任何机构或者个人都可以申请数字证书,并使用数字证书对网络通信保驾护航,要获得数字证书,首先需要使用数字证书管理工具,如keytool、OpenSSL等,然后构建CSR(数字证书签发申请),提交给数字证书认证机构进行签名,最终形成数字证书。
对于keytool、OpenSSL的使用这里不做具体介绍,具体使用参考《大型分布式网站架构设计与实践》第3章节。
5、证书的使用
证书包含一些认证信息以外,还包含了证书持有人的公钥,外界获得证书以后,可以使用公钥对相关信息进行加密,而信息接收
方则使用私钥进行解密。Java提供完善证书管理工具keytool,简介的API使我们能够便捷地获数字证书所包含的信息,以及进行私钥
的管理。
使用Openssl生成的数字证书和私钥,如需在Java环境下使用,需要先将其转换成PKCS#12编码格式的秘钥库,才能够使用keytool
工具进行相应的管理。导出的.p12文件包含了证书文件和私钥,可作为keytool的keystore使用。