`

数字证书、公钥和私钥这三者之间的关系

阅读更多

      根据非对称密码学的原理,每个证书持有人都有一对公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由证书持人自己持有,并且必须妥善保管和注意保密。数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。


      CA完成签发证书后,会将证书发布在CA的证书库(目录服务器)中,任何人都可以查询和下载,因此数字证书和公钥一样是公开的。   

      可以这样说,数字证书就是经过CA认证过的公钥,而私钥一般情况都是由证书持有者在自己本地生成的,由证书持有者自己负责保管。


      具体使用时,签名操作是发送方用私钥进行签名,接受方用发送方证书来验证签名;加密操作则是用接受方的证书进行加密,接受方用自己的私钥进行解密。 因此,如果说数字证书是电子商务应用者的网上数字身份证话,那么证书相应的私钥则可以说是用户的私章或公章。

 

 

      SSL由两个共同工作的协议组成:"SSL 记录协议"(SSL Record Protocol)和"SSL 握手协议"(SSL Handshake Protocol)。SSL 记录协议建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持;SSL 握手协议建立在SSL记录协议之上,用于在实际的数据传输开始前,通信双方进行身份认证、协商加密算法、交换加密密钥等。

 

      SSL握手协议包含两个阶段,第一个阶段用于建立私密性通信信道,第二个阶段用于客户认证。第一阶段是通信的初始化阶段,在此阶段,首先SSL要求服务器向浏览器出示证书;然后浏览器中的SSL软件发给服务器一个随机产生的传输密钥,此密钥由已验证过的公钥加密,随机产生的传输密钥是核心机密,只有客户的浏览器和此公司的Web服务器知道这个数字序列。第二阶段的主要任务是对客户进行认证,此时服务器已经被认证了。服务器方向客户发出认证请求消息。客户收到服务器方的认证请求消息后,发出自己的证书,并且监听对方回送的认证结果。而当服务器收到客户的证书后,给客户回送认证成功消息,否则返回错误消息。到此为止,握手协议全部结束。

要使用SSL协议,服务器至少有一个私有密匙和一个用于验证身份的证书。私有密匙在密匙交换算法中用到,证书将发送到客户端,以通知服务器端的身份。如果SSL服务器要验证客户端的身份,那么客户端必须也有自己的密匙库(包含私有密匙和证书)。JSSE中引入了信任库(truststore)的概念,它是用来保存证书的数据库。客户端或者服务器通过信任库来验证对方的身份。

 

      在使用SSL前,必须确保系统安装了JSSE。JDK1.4版本默认以及安装了JSSE。如果没有安装,把下载安装好的jar文件拷贝到%JAVA_HOME%\ jre\lib\ext目录下。这样,就安装好了JSSE的运行环境。

 

 

下面我们使用JDK自带的工具创建密匙库和信任库:

 

1)通过使用一下的命令来创建服务器端的密匙库。

          

keytool -genkey -alias hellking -keystore server.keystore -keyalg RSA

 
输入keystore密码:     changeit
您的名字与姓氏是什么?
     [Unknown]:     hellking-Server
您的组织单位名称是什么?
     [Unknown]:     huayuan
您的组织名称是什么?
     [Unknown]:     huayuan
您所在的城市或区域名称是什么?
     [Unknown]:     beijing
您所在的州或省份名称是什么?
     [Unknown]:     beijing
该单位的两字母国家代码是什么
     [Unknown]:     cn
CN=chen ya qiang, OU=huayuan, O=huayuan, L=beijing, ST=beijing, C=cn 正确吗?
     [否]:     y
输入<hellking>的主密码
           (如果和 keystore 密码相同,按回车):
       

 

以上命令执行完成后,将获得一个名为server.keystore的密匙库。

 

2)生成客户端的信任库。首先输出RSA证书:

keytool -export -file test_axis.cer -storepass changeit -keystore server.keystore

 

 

然后把RSA证书输入到一个新的信任库文件中。这个信任库被客户端使用,被用来验证服务器端的身份。

keytool -import -file test_axis.cer -storepass changeit -keystore client.truststore -alias serverkey -noprompt

 

3)创建客户端密匙库。重复步骤1,创建客户端的密匙库。也可以使用以下命令来完成:

keytool -genkey -dname " CN=hellking-Client, OU=tsinghua, O=tsinghua, L=BEIJING, S=BEIJING, C=CN" -storepass changeit -keystore client.keystore -keyalg RSA -keypass changeit

  

4)生成服务器端的信任库。

keytool -export -file test_axis.cer -storepass changeit -keystore client.keystore

 

  

keytool -import -file test_axis.cer -storepass changeit -keystore server.truststore -alias clientkey -noprompt

 

生成了密匙库和信任库,我们把服务器端的密匙库(server.keystore)和信任库(server.truststore)拷贝到Tomcat的某个目录。

下面需要更改Tomcat的配置文件(server.xml),增加一下部署描述符:


例程11 为Tomcat配置SSL协议。
                    

 <Connector port="8443" 
                  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                  enableLookups="false" disableUploadTimeout="true"
                  acceptCount="100" debug="0" scheme="https" secure="true"
                  clientAuth="true" keystoreFile="K:\jakarta-tomcat-5.0.16\server.keystore" keystorePass="changeit"
                    truststoreFile="K:\jakarta-tomcat-5.0.16\server.truststore" truststorePass="changeit"
                  sslProtocol="TLS" />

               

 

clientAuth参数制定服务器是否要验证客户端证书,如果指定为true,那么客户端必须拥护服务器端可信任的证书后服务器才能响应客户端;如果指定为false,那么服务器不需要验证客户端的证书。

 

分享到:
评论

相关推荐

    公钥私钥加密解密数字证书数字签名详解.docx

    ### 公钥私钥加密解密、数字证书与数字签名详解 #### 一、基础知识概述 在探讨公钥私钥加密解密、数字证书以及数字签名之前,我们需要先理解几个核心概念。 **1. 密钥对:** - 在非对称加密技术中,存在两种密钥...

    数字证书原理,公钥私钥加密原理1

    对称加密算法中,加密和解密使用同一密钥,这意味着密钥必须在所有参与者之间安全地共享。这种算法在效率上优于公钥密码体制,但在大规模的网络环境中,密钥管理和分发成为难题。 **1.3 非对称加密算法(Asymmetric...

    证书和私钥生成demo-(C++)VS开发

    通过这个C++代码示例,开发者不仅可以学习如何在C++中生成证书和私钥,还能深入理解公钥和私钥在加密和身份验证中的角色。这对于开发涉及安全通信的应用,如HTTPS服务器、电子邮件加密或数字签名等,是非常基础且...

    公钥私钥概念

    3. **数字证书**:数字证书通常包含公钥信息,并由可信的第三方机构(如CA)签发。这些证书用于验证网站或其他实体的身份,确保用户正在与预期的实体通信。 #### 六、总结 通过以上分析,我们可以看到公钥和私钥在...

    Windows下证书私钥和证书请求CSR生成工具

    证书私钥和证书请求(CSR)是生成数字证书的两个关键组成部分。本篇将详细介绍Windows环境下如何生成这些文件,以及相关工具的使用。 标题中的"Windows下证书私钥和证书请求CSR生成工具"指的是在Windows操作系统上...

    支付宝生成私钥公钥工具

    数字证书是由受信任的第三方机构(如CA,Certificate Authority)签发的,它包含了公钥、私钥所有者的身份信息以及签发者的签名。在支付宝的场景下,你可能还需要申请并使用SSL/TLS证书来保护服务器与客户端之间的...

    代码签名数字证书(含私钥),C,C++

    代码签名数字证书是软件开发和发布过程中的一个重要环节,它主要用于验证软件的来源和完整性,保护用户免受恶意代码的侵害。在这个场景中,我们讨论的是一个包含私钥的PFX文件,这是一种常用的证书格式,用于存储...

    公钥加密,数字签名,公钥认证,认证授权,基于 PKI 授权.zip

    CA是一个可信赖的第三方实体,负责验证用户或系统的身份,并签发包含公钥和身份信息的数字证书。这些证书在互联网上广泛用于验证网站的身份,确保用户与正确的服务器通信,防止中间人攻击。 认证授权是网络安全中的...

    公钥私钥加密

    通过上述介绍,我们可以看到**公钥私钥加密**及其配套的数字签名和数字证书技术,在现代网络安全领域发挥着至关重要的作用。它们不仅能够保护信息的机密性,还能确保信息的完整性和来源的可靠性,为用户提供了强大的...

    RSA加密 公钥、密钥生成工具

    RSA的名字来源于其三位发明者Ron Rivest、Adi Shamir和Leonard Adleman。该算法基于大数因子分解的困难性,即找到两个大素数的乘积很容易,但将一个大合数分解成它的素因数却非常困难。 在RSA加密系统中,有两把...

    数字签名和数字证书

    数字证书则是一个包含公钥和其所有者信息的电子文档,由可信任的第三方机构——证书颁发机构(CA)进行签名并分发。证书包含的主要元素有:公钥、私钥的所有者信息(如组织名、域名)、证书颁发机构的名称、证书有效...

    openssl工具(RSA网络通信加密,需要的,生成公钥私钥)

    "openssl工具(RSA网络通信加密,需要的,生成公钥私钥)" 这个标题提到了两个关键概念,一个是`openssl`工具,另一个是`RSA`加密算法,主要用于在网络通信中生成公钥和私钥对。 **`openssl`工具:** `openssl`是...

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

    数字证书是由可信的第三方机构(证书颁发机构,简称CA)发放的一种数字凭证,用于确认持有者的身份及其公钥的有效性。 1. **证书颁发过程**:当鲍勃希望增强其公钥的安全性时,他会向证书中心申请数字证书。证书...

    HNXACA单位个人数字证书登记申请表.pdf

    数字证书通常包含用户的身份信息和公钥,并由可信赖的第三方机构即认证机构(Certification Authority,CA)签发。数字证书的使用广泛,涉及安全通信、电子签名、加密数据传输等多个方面。 数字证书的登记申请步骤...

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

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

    利用数字证书实现电子邮件的数字签名和加密

    三、使用数字证书为邮件签名和加密 在 Foxmail 中所写邮件时,可以使用数字证书为邮件签名和加密。可以同时对邮件数字签名和加密。收到数字签名和加密的邮件,会多两个图标及提示。 在 Outlook Express6 中,发送...

    通俗易懂的数字证书原理

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

    数字证书应用系统的设计与实现

    【数字证书应用系统设计与实现】的论述集中在构建一个基于Java和Microsoft SQL Server 2008的数字证书系统,该系统旨在加深学习者对数字证书原理和应用的理解,同时改进实验室教学环境。数字证书是网络安全领域的...

    RSA加密解密工具,用于文件的加密和解密* RSA加密解密:私钥解密,公钥加密

    4. **文件解密**:只有拥有对应私钥的人才能对使用公钥加密的文件进行解密,这确保了只有预期的接收者才能访问到加密信息。 5. **操作流程**:"RSATool工具简易操作指南 .doc"文件应该详细阐述了如何导入密钥、选择...

Global site tag (gtag.js) - Google Analytics