数字证书简介
2015-06-11 13:01
344 查看
文章参照自:http://www.blogjava.net/Martin-Liu-Hai-Shi/articles/232849.html
一、前言
证书(Certificate,也称public-key certificate)是用某种签名算法对某些内容(比如公钥)进行数字签名后得到的、可以用来当成信任关系中介的数字凭证。证书发行机构通过发行证书告知证书使用者其公钥(public-key)以及其它一些辅助信息。证书在电子商务安全交易中有着广泛的应用,证书发行机构也称CA(Certificate
Authority)。
如果你对数字签名还不熟悉,请先阅读《数字签名简介》,《Java的数字签名和数字证书》
证书的内容和意义如表1所示(这里以通用X .509证书格式为例)。
表1 证书内容和意义
对证书的详细定义及其应用相关的各种协议,这里不加详细说明,详细细节请查看RFC2450、RFC2510、RFC2511、RFC2527、RFC2528、RFC2559、RFC2560、RFC2585、RFC2587等文档。
二、生成自签证书
个人或机构可以从信任的证书分发机构申请得到证书,比如说,可以从http://ca.pku.edu.cn 得到一个属于个人的证书。这里是利用JDK的安全工具keytool手动工产生自签证书,所谓自签证书是指证书中的“Subject Name”和“Issuer Name”相同的证书。
获得自签证书可以分为2个步骤:
第一步:产生keystore。
输入以下命令:
keytool -genkey -alias robin -keystore robin.keystore -storepass GL2009 -keypass gl2009 -validity 100 -keyalg RSA -keysize 1024 -sigalg MD5withRSA
关于此的详细内容请参考《[b]Jar文件的数字签名》[/b]
然后按照提示输入一些信息,如下:
What is your first and last name?
[Unknown]: hubing
What is the name of your organizational unit?
[Unknown]: GL
What is the name of your organization?
[Unknown]: gameloft
What is the name of your City or Locality?
[Unknown]: chengdu
What is the name of your State or Province?
[Unknown]: shichuan
What is the two-letter country code for this unit?
[Unknown]: cn
Is CN=hubing, OU=GL, O=gameloft, L=chengdu, ST=shichuan, C=cn correct?
[no]: yes
第二步,把keystor导成自签证书。
输入以下命令:
keytool -exportcert -alias robin -file robin.crt -keystore robin.keystore -storepass GL2009
这个命令用于把别名为robin的是keystore文件robin.keystore导成证书文件robin.crt,其中是keystore文件robin.keystore的密码。
执行该命令就可以在当前目录下生产证书文件robin.crt.
三、读取数字证书文件。
我们可以在java代码中通过javax.security.certificate包提供的API进行证书信息的读取。关于此的详细内容,请参阅《读取数字证书》
四、使用数字证书
数字证书文件中包含使用者其公钥(public-key),但是其对应的私钥仍然保持在keyStore文件中。因此证书的使用者仍然需要从keyStore文件中读取私钥,以便进行签名。另外数字证书文件所含信息其实只是keyStore文件所含信息的一个子集合,通过KeyStore类的
关于签名中使用数字证书的详细内容,请参照《签名和加密中使用数字证书》
一、前言
证书(Certificate,也称public-key certificate)是用某种签名算法对某些内容(比如公钥)进行数字签名后得到的、可以用来当成信任关系中介的数字凭证。证书发行机构通过发行证书告知证书使用者其公钥(public-key)以及其它一些辅助信息。证书在电子商务安全交易中有着广泛的应用,证书发行机构也称CA(Certificate
Authority)。
如果你对数字签名还不熟悉,请先阅读《数字签名简介》,《Java的数字签名和数字证书》
证书的内容和意义如表1所示(这里以通用X .509证书格式为例)。
表1 证书内容和意义
证书内容 | 意义 |
Version | 告诉这个X.509证书是哪个版本的,目前有v1、V2、v3 |
Serial Number | 由证书分发机构设置证书的序列号 |
Signature Algorithm Identifier | 证书采用什么样的签名算法 |
Issuer Name | 证书发行者名,也就是给这个证书签名的机构名 |
Validity Period | 证书有效时间范围 |
Subject Name | 被证书发行机构签名后的公钥拥有者或实体的名字,采用X.500协议,在Internet上的标志是惟一的。例如:CN=Java,OU=Infosec,O=Infosec Lab,C=CN表示一个subject name。 |
二、生成自签证书
个人或机构可以从信任的证书分发机构申请得到证书,比如说,可以从http://ca.pku.edu.cn 得到一个属于个人的证书。这里是利用JDK的安全工具keytool手动工产生自签证书,所谓自签证书是指证书中的“Subject Name”和“Issuer Name”相同的证书。
获得自签证书可以分为2个步骤:
第一步:产生keystore。
输入以下命令:
keytool -genkey -alias robin -keystore robin.keystore -storepass GL2009 -keypass gl2009 -validity 100 -keyalg RSA -keysize 1024 -sigalg MD5withRSA
关于此的详细内容请参考《[b]Jar文件的数字签名》[/b]
然后按照提示输入一些信息,如下:
What is your first and last name?
[Unknown]: hubing
What is the name of your organizational unit?
[Unknown]: GL
What is the name of your organization?
[Unknown]: gameloft
What is the name of your City or Locality?
[Unknown]: chengdu
What is the name of your State or Province?
[Unknown]: shichuan
What is the two-letter country code for this unit?
[Unknown]: cn
Is CN=hubing, OU=GL, O=gameloft, L=chengdu, ST=shichuan, C=cn correct?
[no]: yes
第二步,把keystor导成自签证书。
输入以下命令:
keytool -exportcert -alias robin -file robin.crt -keystore robin.keystore -storepass GL2009
这个命令用于把别名为robin的是keystore文件robin.keystore导成证书文件robin.crt,其中是keystore文件robin.keystore的密码。
执行该命令就可以在当前目录下生产证书文件robin.crt.
三、读取数字证书文件。
我们可以在java代码中通过javax.security.certificate包提供的API进行证书信息的读取。关于此的详细内容,请参阅《读取数字证书》
四、使用数字证书
数字证书文件中包含使用者其公钥(public-key),但是其对应的私钥仍然保持在keyStore文件中。因此证书的使用者仍然需要从keyStore文件中读取私钥,以便进行签名。另外数字证书文件所含信息其实只是keyStore文件所含信息的一个子集合,通过KeyStore类的
getCertificate(String alias)方法可以返回一个Certificate对象。Certificate是虚类,因此一般返回的是其子类X509Certificate的实例化对象
关于签名中使用数字证书的详细内容,请参照《签名和加密中使用数字证书》
相关文章推荐
- 艾森哲面试 Accenture
- Struts2获取演示示例教程
- win7开机提示未能连接一个windows服务的详细解决办法
- Jquery绑定事件
- C++ Prim算法构造可以使n个城市连接的最小生成树
- Python 2.7 Data Type for Text Strings: Unicode and Str
- poj 1125 Stockbroker Grapevine(多源最短)
- html按钮跳转
- 斗牛游戏的概率探索
- 喇叭的声音和素质成反比--2008-06-27 博客搬家
- C++判断用户输入路径是否正确(判断盘符是否存在以及“\”与"/")
- 视频网址编码
- 资源Createwindow,对应标识符,绑定窗口
- macos10.8.5原版系统dmg转iso
- Android设计模式(十一)--观察者模式
- 程序猿们,你们都有对象了吗?
- 代码注释中的5要与3不要
- [译]使用scikit-learn进行机器学习(scikit-learn教程1)
- 克鲁斯卡尔算法的实现
- 【Git】使用Git在git.oschina上面管理代码