`

数字证书及其简单数字签名的实现

阅读更多

<!--[if !supportLists]-->1、<!--[endif]-->引导语/数字证书的应用

提到数字证书,大家首先可能想到这些。

 然而其实这些也是数字证书运用很广泛的地方,可以说,数字证书是整个信息时代网络安全及其有力的一种保障。

 我们可以简单的用一种很直接的方法查看我们的证书,比如右击一个exe类型的文件,打开文件的属性,然后你可以很清楚的看到数字证书这个选项。一般合格的企业都会给自己的软件颁发一个证书,从而保障自己软件的不可修改和盗用。试着想象一下,如果有人恶意的伪造了一个QQ软件,然后他通过此软件窃取了大量用户的信息,这造成的损失将是不可估量的。

 

 

 

按图示我们可以查看一个文件的证书信息

 

 

 

 

 
如果我们点击查看颁发者,如果你连了网络的话,会自动登录到根证书中心,美国的CA证书中心。
 

 

  当然,我们的每一台电脑也都拥有一个属于自己的证书,打开方式如图,由于我们的电脑是一个物理存在的实体,该证书其实就是本台电脑最高的权限拥有者,所以它不是由权威中心CA负责颁发的,而是由电脑服务商颁发的。

 首先是打开控制面板



 

 

 

 

 


当然也在邮箱服务,office 办公 ,等等很多的方面也是有数字证书签名的运用。

 

 

2、下面我们通过三个步骤来简单的看一下一个数字证书的颁发以及用它对jar包签名的简单实现过程

 

 

 

打开dos窗口,在窗口中输入keytool -genkey -alias Lanjie -keyalg RSA -keysize 1024 -keystroe Lanjie -validity 365 

 

其中:keytool 是密钥工具

     -genkey 是用于获取密钥

 -alias 是自己定义一个别名

 -keyalg是指定算法 此处指定的算法是RSA

     -keysize是指定密钥的长度

     -keystore 是指定密钥库的名字

 -validity 是指定密钥的有效时间

 

在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。这些信息包括

CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,它们的意思是:

CN(Common Name 名字与姓氏)

OU(Organization Unit 组织单位名称)

O(Organization 组织名称)

L(Locality 城市或区域名称)

ST(State 州或省份名称)

C(Country 国家名称)

可以采用交互式让工具提示输入以上信息,也可以采用参数

-dname "CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx"来自动创建。

这里我们使用手动输入。如图所示

 


我们可以用以下的指令查看证书库中的证书
 


 

 

 

 

 

 

 导出两个证书后,我们打开C盘的用户目录,就能在下面看到一个导出来的证书文件。这和我们在前面看到的证书都是一样的,只是这两条证书不是由CA中心颁发的,而是自己给自己颁发的。我们打开证书后,提示该证书是不可信赖的,我们打开后按图示把证书安装后再次打开的时候,就不会提示该证书存在安全风险。同样把另一个个证书都进行这样的安装。

 



 下面我们打开Eclipse ,用java代码实现数字证书的的颁发过程,其实颁发的过程就是一个权威的机构的数字证书给自己的数字证书签名的过程,这个过程其实是用两个证书共同生成一个新证书的过程。下面我们用java代码实现。

FileInputStream fis=new FileInputStream(name);
    	  //JKS为证书库的类型
    	  KeyStore ks= KeyStore.getInstance("JKS");
    	  ks.load(fis, storepass);//从证书库中读出签发者CA证书
    	  //读出一个CA证书
    	  Certificate cf=ks.getCertificate(alias);
    	  //根据别名和证书密码读出CA证书的私钥
    	  PrivateKey privatekey=(PrivateKey)ks
    	                            .getKey(alias, cakeypass);
    	  fis.close();
    	  //提取证书的编码
    	  byte[] encod_first = cf.getEncoded();
    	  //根据证书的编码创建X509Certlmpl对象
    	  X509CertImpl xcp_first=new X509CertImpl(encod_first);
    	  //根据上面的对象获得X509Certinfo类型的对象
    	  //该对象封装了证书的全部内容
    	  X509CertInfo cinfo_first = 
    		  (X509CertInfo)xcp_first.get(X509CertImpl.NAME+"."+X509CertImpl.INFO);
    	 //然后获得X500Name类型的签发者信息
    	  X500Name issuer = (X500Name)cinfo_first.get(
    			  X509CertInfo.SUBJECT+"."+CertificateIssuerName.DN_NAME);

 

详细的代码在附件里面请读者自行下载,每段代码的作用和功能都有比较详细的注释,这里不在赘述。我们按上面的方法导出证书后。安装证后显示如下

 

 

 

 

下面我们用自己写一个简单的Applet小程序,Applet小程序在网页里面运行时如果没有签名,一般的浏览器是不会支持打开的,总是会出现很多的安全性问题和提示。当然有的时候系统还有浏览器的问题总是会造成Applet小程序无法运行,不过我们可以看在网页上看到这个网页已经被签名了,具体查看过程我们待会再说。下面是Applet小程序的书写,Applet小程序同样在附件中,这里选的的是一个小简单的闹钟小程序。我们在Eclipse里面运行Applet小程序后,可以采用多种两种方式对aApplet小程序进行打包,一种最常见的打包方式就是用Eclipse进行打包,打开file-选项,然后是Export,接着打开java,就会看到jar包的选项,如果Eclipse的版本过低的话,没有Runnable JAR file这个选项。不过我们也可以打包出jar包这个选项,因为不管这个程序是否运行,都不影响我们测试签名的过程,

 

当然我们也可以采用dos窗口里面的dos语句来打包一个jar文件,将dos窗口的路径跳到要打开的包的目录 打包过程如下:jar cvf  XX.jar  XX.class     。

 

打包结束后,我们用签名后的证书给jar包签名 签名的过程很简单。签名后的jar包是用于防止抵赖的保障,这里不涉及防止抵赖。我们可用原来的  证书签名 jarsigner -keystore lanjie ClockApplet.jar lanjie。这样一个签名结束。签名的目的是使得网页对本地文件产生信赖,从而可以打开本地文件,不过有时候由于系统以及浏览器的问题,网页的applet有时候不能正常的显示,不过这不影响我们判断签名是否成功。

 

 下面我们写一个简单的html文件。此文件用于存放applet文件。

 

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          

     

<html>
<body>
  <applet codebase="." 
  code="Clock.class" 
  name="ClockApplet" 
archive="ClockApplet.jar"
  width="320" 
  height="240">
  </applet>
  </body>
</html>

 

 

接着我们要做的事就是用浏览器打开html文,首先我们将看到。

 



 这是浏览器为了我们电脑自身的安全所做的一个安全保障。如果applet没有问题并且用户以及浏览器权限允许的情况下,我们点击允许后可以看到做好的applet在网页中运行。这里我们点击详细信息后就可以看到如下。

 



 我们可以看到这个html里面的jar包已经被lanjie这个数字证书签名了!它里面包含了各种签名的信息。不用质疑,签名过程已经实现了。大笑尴尬

 

  • 大小: 48.1 KB
  • 大小: 15.1 KB
  • 大小: 51.4 KB
  • 大小: 16.6 KB
  • 大小: 12.2 KB
  • 大小: 14.2 KB
  • 大小: 12.9 KB
  • 大小: 54.1 KB
  • 大小: 67 KB
  • 大小: 23.6 KB
  • 大小: 17.6 KB
  • 大小: 29 KB
  • 大小: 23.6 KB
  • 大小: 10.5 KB
  • 大小: 34 KB
  • 大小: 13.6 KB
  • 大小: 23 KB
  • 大小: 3 KB
  • 大小: 23 KB
  • 大小: 23.4 KB
  • 大小: 6.1 KB
  • 大小: 45.2 KB
  • 大小: 23.8 KB
  • 大小: 46 KB
  • 大小: 123.3 KB
分享到:
评论

相关推荐

    windows数字证书工具

    makecert.exe:制作cer格式的证书; cert2spc.exe:将cer格式证书转换成spc格式证书...signtool.exe:数字签名工具,将证书签署到(dll,ocx,exe)上去(随visualstudio 2005及其以后的版本发布) pvk2pfx.exe(pvkimprt.exe)

    Activex控件签名工具包

    数字证书,你可以创建自己的数字证书来测试数字签名的流程,但是正式的软件发布,你需要向可信赖的证书颁发机构购买数字证书和密码,例如你可以向以下的证书机构购买Comodo, Globalsign, Thawte and Verisign。...

    java简单的数字签名系统

    接着系统介绍了数字签名的原理及其相关技术,包括密码技术、签名算法、单向散列函数和数字证书等。然后通过使用Windows和Java安全的相关内容实现数字签名在单机上的模拟来更加深刻地了解其过程。最后是对本论文的...

    物联网安全技术框架《物联网安全导论》.pptx

    此外,本资源还介绍了数字证书、电子签证机关(CA)、数字签名等常用信息安全技术。数字证书是数字身份证书,用于证明用户的身份;电子签证机关(CA)是负责颁发数字证书的机构;数字签名是用于验证消息的真实性和...

    【重磅】最新发布执行的商用密码标准汇总(161份).zip

    公钥基础设施 数字证书格式 证书认证系统密码及其相关安全技术规范 可信计算密码支撑平台功能与接口规范 电子文档加密与签名消息语法 SM3密码杂凑算法 SM4分组密码算法 SM2椭圆曲线公钥密码算法 第1部分:总则 SM2...

    Java加密与解密的艺术配书源代码

    带有数字签名的加密网络应用318 9.7 小结319 第三部分综合应用篇 第10章终极武器—数字证书332 10.1 数字证书详解332 10.2 模型分析335 10.3 证书管理337 10.4 证书使用351 10.5 应用举例360 10.6 小结360 第11章...

    毕业论文——密码服务组件的研究与开发

    4.3数字签名的实现…………………………………………..……………................. 4.4数字签名的验证…………………………………………..……………...................... 第五章 系统测试…………………………...

    操作类(文件读写,XML操作,各种加密解密等)

    10、PKCS:The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等...

    网络安全的预防措施.doc

    数字证书是一个经证书授权中心数字签名的包含公钥拥有者信息以及公钥的文件数字证 书的最主要构成包括一个用户公钥,加上密钥所有者的用户身份标识符,以及被信任的 第三方签名第三方一般是用户信任的证书权威机构...

    Java加密与解密的艺术

    带有数字签名的加密网络应用3189.7 小结319第三部分综合应用篇第10章终极武器—数字证书33210.1 数字证书详解33210.2 模型分析33510.3 证书管理33710.4 证书使用35110.5 应用举例36010.6 小结360第11章终极装备—...

    招商银行网上银行安全性分析.pdf

    技术手段是指使用加密技术、数字签名等来保护数据的安全。业务安全监控办法是指对业务操作的实时监控和记录,以便及时发现和处理安全事件。 网上银行支付体系的安全保障措施包括使用 SSL 加密技术、数字证书认证、...

    JAVA 2平台安全技术-结构,API设计和实现

    4.3 数字证书 77 4.4 有用的安全工具 80 4.4.1 密钥数据库 80 4.4.2 keytool 82 4.4.3 策略工具 86 4.4.4 jarsigner 88 4.4.5 代码签名实例 91 4.5 非专业安全策略管理 92 第5章 结构定制安全 94 5.1 创建新的许可权...

    计算机网络安全总结复习.docx

    数字证书就是网络通信中标志通信各方身份信息的一系列,其作用类似于现实生 活的身份证A 活的身份证 A A 商品 数字签名的过程 四、防火墙技术 防火墙是在两个网络间实现访问控制的一个或一组软硬件系统。...

    Java 2平台安全技术-结构,API设计和实现

    4.3 数字证书 77 4.4 有用的安全工具 80 4.4.1 密钥数据库 80 4.4.2 keytool 82 4.4.3 策略工具 86 4.4.4 jarsigner 88 4.4.5 代码签名实例 91 4.5 非专业安全策略管理 92 第5章 结构定制安全 94 5.1 创建新的许可权...

    探究银行系统计算机网络安全技术策略.pdf

    可以使用数字证书来确认客户身份及其对资源访问的一种权限或者资质。 (三)网关认证技术:网关认证技术可以确保银行交易的安全性。可以使用网关认证技术来确认客户身份及其对资源访问的一种权限或者资质。 (四)...

    2017年上半年 信息安全工程师 答案详解

    ... 2. 安全标记保护级:安全标记保护级的主要特征是计算机信息系统可信计算基对所有主体及其所控制的客体(如进程、文件、...12. 数字证书:数字证书是一种通过对信件的数字签名和加密来确保信件的安全和真实的技术。

    Java安全性编程实例(徐迎晓)

    # 第五章和第六章介绍基于摘要和签名技术的数字证书。这是Java安全中确定身份的主要技术。其中第五章介绍了数字证书的创建、签发、验证和维护等,第六章介绍了多个证书组成的证书链(CertPath)的创建和验证。 # 第...

    NTKO文档在线编辑控件4.0.1.2

    NTKO OFFICE文档控件支持在线编辑,痕迹保留,手写签名,电子印章,全屏批注,电子签名[数字签名,数字证书签名],简单OCR等实用功能,支持PHP,ASP,JSP,C#,VB.NET,DOMINO等各种web编程语言和服务器。 NTKO OFFICE文档...

Global site tag (gtag.js) - Google Analytics