基于自签名的X 509数字证书生成及验证

本文介绍了如何在服务器端生成自签名的X.509数字证书,并提供了证书的验证方法。详细步骤包括使用keytool生成密钥库、自签名证书、更新证书有效期,以及在客户端进行证书有效性与有效期的验证。

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

 

基于自签名的X.509数字证书生成及验证

 

数字证书用于标志网络用户身份,在Web应用中,数字证书的应用十分广泛,如:安全电子邮件、访问安全站点、安全电子事务处理和安全电子交易等。

数字证书的格式一般采用X.509国际标准。目前,数字证书认证中心主要签发安全电子邮件证书、个人和企业身份证书、服务器证书以及代码签名证书等几种类型证书。

 

数字证书由证书机构签发,证书机构通常需经权威认证机构注册认证。在企业应用中,也常用企业自身作为发证机构(未经过认证)签发数字证书,证书的使用范围也常是企业内部,这样的证书就是所谓的“自签名”的。

 

数字证书采用公钥密码体制,每个用户拥有一把仅为本人所掌握的私有密钥(私钥),用它进行解密和签名;同时拥有一把公共密钥(公钥)并可以对外公开,用于加密和验证签名。

 

下面介绍我们在项目中常用的自签名证书的生成及验证方法。为简单起见,我们假设所有网站用户使用同一个数字证书clientCA

 

一、服务器端

 

登录远程服务器,在服务器端生成证书并提供下载。服务器上应当安装jdk1.5以上,因为我们需要使用jdk自带的keytool工具,keytool工具位于jdk安装目录的bin目录下。

1、 生成密钥数据库及根证书

如果是第1次使用数字证书,那么很可能服务器上还没有密钥数据库。我们可以使用下列命令成密钥数据库(keystore)。

keytool -genkey -dname "CN=发证人姓名,OU=发证人所属部门,O=发证人所属公司,L=昆明市,ST=云南省,C=中国" -alias IPCCCA -keyalg RSA -keysize 1024 -keystore IPCCCA-keypass 根证书密码-storepass 库密码

 

运行脚本后,会在当前用户主目录(如:C:/Documents and Settings/Administrator目录,window系统)下生成密钥数据库文件IPCCCA。注意,需要设置两个密码,一个是根证书密码keypass,一个是库密码storepass,如果你不是很确定二者间的区别,最好两个都设置成一样。

 

2、 生成自签名证书

运行下列命令,生成一个自签名证书:

keytool -genkey -dname "CN=发证人姓名,OU=发证人所属部门,O=发证人所属公司,L=昆明市,ST=云南省,C=中国" -alias clientCA -keyalg RSA -keysize 1024 -keystore IPCCCA-keypass 123456 -storepass 库密码 -validity 1

这个证书是一个自签名证书,该证书的别名为clientCA,存储在前面生成的那个密钥库文件(IPCCCA)中。这需要提供访问该库的库密码(storepass),必须跟第1步中的一样。Kepass是该证书的公钥,验证证书时需要提供该密钥。

并且为了便于测试,我们把证书有效期设置为1天。这样每过一天,用户必须重新下载证书。

3、 查看密钥库

你可以用下列命令查看生成的两个密钥:

keytool -list -keystore IPCCCA –storepass  库密码

结果会列出两个密钥,类似如下:

您的 keystore 包含 2 输入

 

clientca, 2011-3-30, keyEntry,

认证指纹 (MD5)10:B8:51:54:7B:1C:60:7C:89:E7:B6:8E:71:E5:E1:E7

ipccca, 2011-3-30, keyEntry,

认证指纹 (MD5) C3:E3:7D:7C:9B:AA:05:84:92:AF:93:18:42:D2:1C:07

 

4、 提供证书下载

我们可以在服务器上放一个servlet,以提供自签名证书的下载:

privatestatic final long serialVersionUID = 1L;

// 有效期天数

privatestatic final int Max_Days = 1;

//keystore密码

privatestatic final char[] password = "ipcc@95598".toCharArray();

//keystore文件路径

privatestatic final String keystoreFilename = "C://Documents andSettings//Administrator//IPCCCA";

// 证书文件名

privatestatic final String certFilename="client.cer";

//  证书别名

privatestatic final String alias = "clientCA";

privateKeyStore keystore;  

    private String sigAlgrithm;

//读取keystore

privateKeyStore loadKeystore(String keystorepath) {

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值