`

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

阅读更多

<!--[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
分享到:
评论

相关推荐

    轻松理解数字签名和数字证书

    ### 数字签名与数字证书详解 #### 一、数字签名概览 数字签名是一种用于验证电子文档完整性和来源的技术手段,常被应用于电子商务、电子政务以及其他需要确保信息安全传输的领域。数字签名通过加密技术实现,具体...

    数字证书实验详细步骤及原理

    实验目的旨在让学生了解 PKI 体系、用户证书申请和 CA 颁发证书过程、认证服务的安装及配置方法、使用数字证书配置安全站点的方法、使用数字证书发送签名邮件和加密邮件的方法。 一、实验目的 本实验的目的是验证...

    Java 数字签名、数字证书生成源码.zip

    这份"Java 数字签名、数字证书生成源码"的压缩包提供了实现这些功能的代码示例,对于理解和应用Java安全机制非常有帮助。 数字签名是一种用于验证电子信息完整性和发送者身份的技术。它结合了非对称加密算法(如RSA...

    看图片 读故事:轻松理解数字签名和数字证书 pdf

    《看图片 读故事:轻松理解数字签名和数字证书》一文通过生动的故事和直观的图像,深入浅出地解析了数字签名与数字证书的概念及其工作原理,为读者提供了清晰的思维导图,帮助理解这一复杂的IT安全领域知识。...

    数字签名与数字证书

    本文将深入探讨数字签名、数字信封以及数字证书的基本原理、应用场景及其相互之间的关系。 #### 数字签名:保障数据完整性的基石 数字签名是一种用于验证电子文档真实性和完整性的技术。它的实现基于公钥基础设施...

    Java 数字签名、数字证书生成源码.7z

    在这个"Java 数字签名、数字证书生成源码"压缩包中,包含了实现这些功能的源代码,对于理解Java安全编程和实际应用具有很高的价值。 1. **数字签名** 数字签名是一种用于验证电子文档完整性和发送者身份的技术。在...

    Java实现浏览器CA证书的签名和验证

    在众多保障网络安全的技术中,数字证书及其背后的公钥基础设施(Public Key Infrastructure, PKI)扮演着至关重要的角色。本文将深入探讨数字证书的基本概念,以及如何利用Java技术实现浏览器与服务器之间基于数字...

    Openssl与数字证书

    **数字证书**是由可信的第三方机构(证书颁发机构,CA)颁发的一种电子文档,用于验证数字证书持有者身份的真实性及其公钥的有效性。数字证书通常包含以下信息: - 证书持有者的名称和相关信息。 - 证书持有者的公钥...

    大学生毕业设计之CA系统(数字证书,数字签名).zip

    数字证书是一种包含公开密钥及其所有者信息的数据文件,由CA进行数字签名后发布。在本设计中,使用VC++编程语言实现小型CA系统,涉及到的关键技术包括公钥加密算法(如RSA)、哈希函数(如SHA-1或MD5)以及X.509证书...

    数字签名证书生成器IDSignMSO

    在IT行业中,数字签名证书是确保软件安全性和完整性的关键元素。数字签名证书生成器如IDSignMSO,是开发者和软件发行者的重要...了解并掌握数字签名技术及其应用,对于任何涉及软件发布的个人或组织都是至关重要的。

    PKI/CA与数字证书技术大全

    3. **数字证书**:数字证书是一个包含公开密钥及其所有者信息的数据文件,由CA签名以证明其有效性。它用于确认网络通信中双方的身份,以及用于加密和验证信息的完整性和来源。 4. **密码学基础**:在理解PKI时,...

    数字证书的概念

    数字签名是数字证书的核心组成部分之一。在发送者处,首先计算消息的哈希值,然后使用私钥对哈希值进行加密处理,随后将原始消息和加密后的哈希值一同发送给接收者。接收者使用发送者的公钥解密接收到的哈希值,并...

    数字证书格式详细说明

    数字证书是公钥加密系统中不可或缺的一部分,它用于身份验证、数据加密和数字签名。常见的数字证书格式有 X.509,它定义了两种证书:公钥证书和属性证书。 X.509 证书格式由以下部分组成: * 证书元数据...

    基于Java的数字签名、数字证书生成源码.zip

    通过这些源码,你可以更深入地理解数字签名和数字证书的生成机制,并在自己的项目中实现安全的通信功能。 总的来说,Java提供了一套完整的API来处理数字签名和数字证书,使得开发者能够在应用程序中轻松集成安全...

    java实现数字签名

    3. **数据发送**:将数据及其数字签名一并发送给接收方。 4. **数据验证**:接收方使用发送方的公钥解密数字签名,获取哈希值;同时自行计算数据的哈希值并与解密后的哈希值比较,验证数据的真实性。 #### 四、总结...

    数字证书验证系统的设计与实现.pdf

    #### 二、数字证书及其验证机制 ##### 2.1 数字证书的结构与格式 数字证书遵循X.509标准,该标准规定了数字证书的基本格式和内容。一份完整的数字证书通常包含以下要素: - **版本信息**:指明证书遵循的X.509...

    数字证书签名-问题指引

    ### 数字证书签名-问题指引 #### 一、数字证书已过期,无法对表单进行签名 在使用数字证书进行表单签名的过程中,如果遇到提示数字证书已过期的情况,意味着该证书的有效期限已经结束,无法继续使用该证书进行签名...

    通俗易懂的数字证书原理

    在深入探讨数字证书之前,我们需要了解一些基本的概念和技术背景,包括公钥密码体制、对称加密算法、非对称加密算法、RSA算法及其应用。 ##### 1.1 公钥密码体制(Public-Key Cryptography) 公钥密码体制是现代...

    数字证书与加密认证试验

    根据提供的文件信息,我们可以深入探讨数字证书与加密认证的相关知识点。 ### 数字证书与加密认证基础知识 #### 数字证书 数字证书是一种用于网络环境中验证实体身份的电子文档。它通过公钥基础设施(PKI)来确保...

Global site tag (gtag.js) - Google Analytics