实验三.docx

上传人:b****3 文档编号:24770248 上传时间:2023-06-01 格式:DOCX 页数:16 大小:576.83KB
下载 相关 举报
实验三.docx_第1页
第1页 / 共16页
实验三.docx_第2页
第2页 / 共16页
实验三.docx_第3页
第3页 / 共16页
实验三.docx_第4页
第4页 / 共16页
实验三.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

实验三.docx

《实验三.docx》由会员分享,可在线阅读,更多相关《实验三.docx(16页珍藏版)》请在冰豆网上搜索。

实验三.docx

实验三

一、实习目的

1.理解数字证书的概念和作用;

2.理解公钥基础设施(publickeyinfrastructure,PKI)的原理;

3.掌握数字证书管理的实现。

二、实习要求

1.实习前认真预习第5章的有关内容;

2.复习数字证书和PKI相关内容;

2.熟悉Java平台的JCE包有关类。

三、实习内容

基于java平台实现一个数字证书系统,阶梯任务如下:

①用keytool、KeyStored等工具,分别用默认密钥库和算法、别名、指定算法和密钥有效期以及非交互模式等方式创建数字证书;

②数字证书的显示:

用keytool显示证书条目、详细信息、导入文件以及从文件中显示,在windows中直接从文件中显示证书,Java程序从文件中读取证书;

③实现M密文状态下的签名与模拟分发;

④采用SSL,建立安全通信过程,实现Socket通信的签名分发;

⑤将方案移植到某个web应用中,实现实用的签名分发。

数字证书概念

数字证书又称为数字标识,是标志网络用户身份信息的一系列数据。

它提供了一种在互联网上身份验证的方式,是用来标志和证明网络通信双方身份的数字信息文件。

通俗地讲,数字证书就是个人或单位在互联网的身份证。

数字证书是由作为第三方的法定数字认证中心(CA)中心签发,以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性,以及交易实体身份的真实性,签名信息的不可否认性,从而保障网络应用的安全性。

从数字证书的技术角度分,CA中心发放的证书分为两类:

SSL证书和SET证书。

一般地说,SSL证书(安全套接层)是服务于银行对企业或企业对企业的电子商务活动的;而SET(安全电子交易)证书则服务于持卡消费、网上购物。

虽然它们都是用于识别身份和数字签名的证书,但它们的信任体系完全不同,而且所符合的标准也不一样。

简单地说,SSL数字证书的功能作用是通过公开密钥证明持证人的身份。

而SET证书的作用则是,通过公开密钥证明持证人在指定银行确实拥有该信用卡账号,同时也证明了持证人的身份。

一、keytool的概念

  keytool是个密钥和证书管理工具。

它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务。

在JDK 1.4以后的版本中都包含了这一工具,它的位置下图所示:

二、keytool的用法

三、创建证书

  创建证书主要是使用" -genkeypair",该命令的可用参数如下:

参数说明:

-genkeypair:

生成一对非对称密钥;

-alias:

指定密钥对的别名,该别名是公开的;

-keyalg:

指定加密算法,本例中的采用通用的RAS加密算法;

-keystore:

密钥库的路径及名称,不指定的话,默认在操作系统的用户目录下生成一个".keystore"的文件

注意:

  1.密钥库的密码至少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等等

2."名字与姓氏"应该是输入域名,而不是我们的个人姓名,其他的可以不填

执行完上述命令后,在操作系统的用户目录下生成了一个"a.keystore"的文件,如下图所示:

四、查看密钥库里面的证书

范例:

查看test.keystore这个密钥库里面的所有证书

五、导出到证书文件

范例:

将名为test.keystore的证书库中别名为test1的证书条目导出到证书文件test.crt中

Cmd代码

1keytool-export-aliastest1-filetest.crt-keystoretest.keystore

六、导入证书

范例:

将证书文件test.crt导入到名为test_cacerts的证书库中

七、查看证书信息

范例:

查看证书文件test.crt的信息

JKS是Java中的keystore,Java设计换型的道具。

接下来我们将展示如何使用纯Java代码的JKSkeystore。

1.创建JKS的keystore

创建一个硕密钥库创建一个空的密钥库的最简单的方法。

我们可以先得到密钥库实例,然后加载一个空库。

加载后的空库,我们只需要为密钥的密钥。

密钥名称和密码store()。

在调用后执行),你会看到在当前工作目录mytestkey.jkskeystore介绍。

现在还没有任何keystore是空的。

2.存储私钥

现在让我们来存储一个私钥和相关的证书链的密钥。

注意我们不能存储私钥不相关的证书链到一个密钥使用JDK。

与其他一些库或本地库,你可以存储私钥不相关的证书链。

首先,我们将创建一个私钥和一个自签名证书,然后调用库。

setkeyentry()与指定的别名,关键的关键,和其相关的证书链的密码。

记得我们需要调用库。

store()存储在keystore关键。

别名的条目,它很容易被发现后,标签。

 

3.存储证书

我们可以存储在keystore证书。

将证书存储应X509Certificate。

它可以存储在keystore无关联的私钥。

这个过程类似于存储私钥。

4.加载私钥

存储键后,我们还可以加载项在密钥。

在这里,我们实际上提取私钥的证书链。

5.加载证书

这是类似于加载私钥,我们需要通过我们要提取证书别名。

6.导入密钥和证书

packagecom.stone.security;

importjava.io.FileInputStream;

importjava.security.Key;

importjava.security.KeyStore;

importjava.security.cert.CertificateFactory;

importjava.security.cert.Certificate;

importjava.security.cert.X509Certificate;

importjava.util.Enumeration;

/**

*证书测试

*在java程序中使用Certificate类来描述通用的数字证书,其子类X509Certificate则专用于描述X.509类别的数字证书

*@authorstone

*@date2016-05-1816.09

*/

publicclassTestCertificate{

publicstaticvoidmain(String[]args)throwsException{

//loadCertificateFromStore();

loadCertificateFromFile();

}

/**

*从keystore中提取证书并显示证书信息

*@throwsException

*/

publicstaticvoidloadCertificateFromStore()throwsException{

KeyStorekeyStore=KeyStore.getInstance("jks");

FileInputStreamfis=newFileInputStream("C:

/ProgramFiles(x86)/Java/jre8/bin/a.keystore");

keyStore.load(fis,"123456".toCharArray());

fis.close();

Certificatecert=keyStore.getCertificate("a");

System.out.println(cert.toString());

Enumerationaliases=keyStore.aliases();

while(aliases.hasMoreElements()){

System.out.println("keystore中含有别名有:

"+aliases.nextElement());

}

//keytool-keypasswd-v-aliasszy-new123456

Keykey=keyStore.getKey("a","123456".toCharArray());

keyStore.setKeyEntry("a",key,"asdfas".toCharArray(),keyStore.getCertificateChain("a"));

System.out.println(keyStore.containsAlias("a"));

keyStore.deleteEntry("abc");

}

/**

*直接根据证书文件获取Certificate对象

*@throwsException

*/

publicstaticvoidloadCertificateFromFile()throwsException{

CertificateFactoryfactory=CertificateFactory.getInstance("X.509");

FileInputStreamfis=newFileInputStream("C:

/ProgramFiles(x86)/Java/jre8/bin/a.crt");

Certificatecert=factory.generateCertificate(fis);

fis.close();

X509Certificatex509cert=(X509Certificate)cert;

System.out.println("公钥:

"+x509cert.getPublicKey());

System.out.println("签名:

"+x509cert.getSignature());

System.out.println("签名算法:

"+x509cert.getSigAlgName());

System.out.println("类型:

"+x509cert.getType());

System.out.println("证书所有者:

"+x509cert.getSubjectDN());

System.out.println("证书发布者:

"+x509cert.getIssuerDN());

System.out.println("证书起始有效日期:

"+x509cert.getNotBefore());

System.out.println("证书终止有效日期:

"+x509cert.getNotAfter());

}

}

总结

从keystore中提取证书并显示证书信息。

KeyStorekeyStore=KeyStore.getInstance("jks");

jks是数字证书库,可以在配置ssl的时候使用。

 在配置ssl时一般分为信任库和证书库。

 

  jks里有KeyEntry和CertEntry,而且可以具有多个这些Entry.KeyEntry是必须包含PrivateKey和证书(当然也包含了PublicKey)。

 在库里的每个Entry都是靠别名来识别的。

在cmd命令查看密钥库里面的证书时,一直出现拒绝访问a.kestore,最后XX一下需要在管理员身份下运行cmd命令。

首先运用keytool工具创建数字证书,然后导入到证书库,最后在java程序显示证书的信息。

当命令行的keyalg错误的输入成keylag时会显示不是x509证书。

X509证书采用2048位的RSA进行公钥加密,签名算法采用SHA256withRSA,证书有效时间4个月,可以有效验证数字证书持有者的真实身份。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1