`
yale
  • 浏览: 359884 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

CA认证原理以及实现(下)

 
阅读更多

在上述的文章后了解到原理之后,我们这篇文章来进行CA的搭建。

OPEN SSL 环境搭建
在基础原理中我们提到了两种认证服务,单项认证服务和双向认证服务,我们就以双向认证服务举例说明。
OpenSSL是一个开放源代码软件包,实现了SSL以及相关加密技术,是最常用的证书管理工具,OpenSSL功能远胜于KeyTool,可用于根证书(KeyTool不含有,因此KeyTool没有办法作为CA)、服务器证书、客户证书的管理。
在OpenSSL官网下载:http:www.openssl.org/source/下载最新的源码,官网还提供了windows版的二进制发行版地址:http://www.slproweb.com/products/Win32OpenSSL.html
 1、 准备工作
 选择适合自己操作系统的版本进行下载后,安装操作与普通软件一样,没有什么区别
 设置环境变量:

 

打开配置文件openssl.cfg(%OpenSSL_Home%\bin\openssl.cfg),找到配置[CA_default]:

上述变量dir,它指向的是CA工作目录,可以对其进行修改

2、 创建bat文件
整个bat文件的创建过程我们可以把它想象成这样一种场景:
高考结束,教育局来颁发毕业证书给各个学校,各个学校在把证书发给学生,具体步骤如下:
1) 教育局先有空白证书了
2) 教育局又有自己的公章
3) 让各个学校可以拥有毕业证发放申请
4) 对空白的毕业证盖上了教育局的公章,并可以交给已经申请的学校
5) 申请的学校拿到了盖有教育局的毕业证后,准备对其盖上自己的公章
6) 学校在教育局已经盖上教育局公章的毕业证上又盖上了自己学校的公章
7) 准备把毕业证发给学校申请毕业的学生们
8) 申请毕业的学生拿取自己的学生证和身份证准备领取毕业证
9) 来到学校教务处,填写单据申请学校发放毕业证
10) 教育局已经转交学校来发放毕业证,此时学校把毕业证发放给申请学生
11) 学生认为盖有教育局的公章和学校的公章的毕业证是有效的

 

上述步骤,都可以在下面的bat文件中找到相应的地方:

//构建ca子目录(证书创建时,用到下述目录,最终在certs目录中获得证书文件)
echo 构建已发型证书存放目录 certs
mkdir certs
echo 构建新证书存放目录 newcerts
mkdir newcerts
echo 构建私钥存放目录 private
mkdir private
echo 构建证书吊销列表存放目录 crl
mkdir cr1 
//构建相关文件,完成后可以进行证书的构建和签发工作
echo 构建索引文件 index.txt
echo 0>index.txt
echo 构建序列号文件 serial
echo 01>serial
      //构建根证书 
echo 构建随机数 private/.rand
openssl rand -out private/.rand 1000
//构建根证书私钥
echo 构建根证书私钥 private/ca.key.pem
openssl genrsa -aes256 -out private/ca.key.pem 2048
//完成密钥构建操作后,需要生成根证书签发申请文件ca.csr
//生成根证书签发申请
echo 生成根证书签发申请 private/ca.csr
openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=HUBEI/L=WUHAN/O=YALE/OU=YALE/CN=*.qiujinyong.org"
//执行完后此处又要输入根证书密码
//得到根证书签发申请文件后,可以将其发送给CA机构签发,也可以自行签发根证书
echo 签发根证书 private/ca.cer  
openssl x509 -req -days 1000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
//执行完后此处又要输入根证书密码
echo 根证书转换 private/ca.p12
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certs/ca.cer -out certs/ca.p12
//执行完后此处又要输入根证书密码
//构建服务器证书
echo 构建服务器私钥 private/server.key.pem
openssl genrsa -aes256 -out private/server.key.pem 2048
//服务器证书签发申请
echo 生成服务器证书签发申请 private/server.csr
openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=HUBEI/L=WUHAN/O=YALE/OU=YALE/CN=www.qiujinyong.com"
//执行完后此处又要输入根证书密码
//根证书签发服务器证书 
echo 签发服务器证书 private/server.cer
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certs/server.cer
//执行完后此处又要输入根证书密码
//将OpenSSL产生的数字证书转换为PKCS#12编码格式
echo 服务器证书转换 private/server.p12
openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12
//执行完后此处又要输入根证书密码
//构建客户证书
echo 产生客户私钥 private/client.key.pem
openssl genrsa -aes256 -out private/client.key.pem 2048
//执行完后此处又要输入根证书密码
//产生客户证书签发申请
echo 生成客户证书签发申请 client.csr
openssl req -new -key private/client.key.pem -out private/client.csr -subj "/C=CN/ST=HUBEI/L=WUHAN/O=YALE/OU=YALE/CN=qiujinyong"
//执行完后此处又要输入根证书密码
//根证书签发客户证书
echo 签发客户证书 certs/client.cer
openssl  x509 -req -days 3650 -sha1 -extensions v3_req -CA  certs/ca.cer  -CAkey  private/ca.key.pem  -CAserial ca.srl -CAcreateserial -in private/client.csr -out  certs/client.cer
//执行完后此处又要输入根证书密码
//将获得客户证书转换JAVA语言可以识别的PKCS#12编码格式
echo 客户证书转换 certs/client.p12
openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12
//完成了双向认证的所需的全部证书

 

3、 文件生成
通过上述语句我们生成了以下几个“一级”文件以及文件夹:

 

Certs文件夹下又生成了:

 

Private文件夹下又生成了:

 

4、 证书导入
我们使用ca.p12、server.p12、client.p12个人信息交换文件构建双向认证,在验证操作之前,我们先导入ca.p12、client.p12文件

ca.p12文件是ca根证书的个人信息交换文件:
双击”ca.p12”或者点击在浏览器"工具"->"internet选项"->"内容"中的"证书"->"导入"



点击“下一步”后,“浏览”按钮时,指定个人信息交换文件格式(*.p12;*.pfx), 选择“ca.p12的所在位置”:

 

 

输入私钥的密码:

 

选择“将所有的证书放入下列存储”:

 

点击“浏览”,选择“受信任的根证书颁发机构”:

 

 

 

点击“下一步”,然后点击“完成”

导入”client.p12”文件:
导入clinet.p12文件的方式和ca.p12文件方式基本相似,只是在证书存储时,选择“个人”:

 

 

5、 服务器配置
将”ca.p12”、”server.p12”文件复制到tomcat的conf目录下:

同时,需要在windows系统下通过ie导入ca.p12和client.p12文件:

 

 

我们在tomcat的server.xml文件中配置双向认证:

  <Connector port="443" maxHttpHeaderSize="8192"
            maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
	    sslProtocol="TLS" keystoreFile="conf/server.p12"  
	    keystorePass="123456" keystoreType="PKCS12"                             
            truststoreFile="conf/ca.p12" acceptCount="100" scheme="https" secure="true"
            sslEnabled="true" clientAuth="true" truststorePass="123456" truststoreType="PKCS12"/>

 这里的密钥库文件参数keystoreFile指向server.p12文件,密钥库密码参数keystorePass值为”123456”,密钥库类型参数keystoreType值为”PKCS12”,因为双向认证服务区分信任库文件和密钥库文件,此时,server.p12文件将作为密钥库文件,而ca.p12文件则作为信任库文件,因此,信任库文件参数truststoreFile指向ca.p12文件,信任库密码参数truststorePass值为”123456”,信任库类型参数truststoreType值为“pkcs12”,clientAuth的值为”true”,这是打开双向认证的关键一步,port默认为8443,现在修改为443,这样就省去我们在地址栏中输入端口号。


 

效果展现

 输入我们证书绑定的网站,https打头:

 

 

 查看给该网站颁发的证书的属性:

 

点击授予权限:

 

如果我们是自己创建的根证书没有通过CA验证的话,那么会在地址栏中看到相关信息,如下图:

 


点击继续浏览, 虽然我们连接的是本地服务器,但仍然会感到有些延时,这是因为浏览器访问CA机构验证该证书,并初始化加密/解密等信息:

 

 上述我们看到“证书错误”,就是因为我们的根证书并没有得到CA的认证

 

我们如果加上验证的代码后:

    for(Enumeration en = request.getAttributeNames();
         en.hasMoreElements();){
         String name = (String)en.nextElement();
         out.println(name);
         out.println(" = " + request.getAttribute(name));
         out.println();
    }

 

可以看到如下结果:


上述有些相关属性解释:
javax.servlet.request.ssl_session:当前SSL/TLS协议的会话ID
java.servlet.request.key_size:当前加密算法所使用的密钥长度
javax.servlet.request.cipher_suite:当前SSL /TLS协议所使用的加密套件(比如上述:使用的TLS协议,RSA的非对称加密算法,AES的对称加密算法,同时是128的,SHA的消息摘要算法,CBC的工作模式,,,一般使用非对称加密算法对数据进行加密/解密操作的效率相当低,而使用对称加密算法进行加密/解密的效率相当高,合理的解决办法是使用非对称加密算法传递对称加密算法的密钥,使用对称加密算法对数据加密)
javax.servlet.request.X509Certificate:指向客户证书列表

7
0
分享到:
评论

相关推荐

    CA 原理关于CA工作原理的资料

    下面我们将深入探讨CA工作原理以及其在机顶盒中的应用。 首先,CA系统的核心组成部分包括智能卡(Smart Card)和 Conditional Access Module(CAM,条件接收模块)。智能卡是一种含有微处理器和存储器的卡片,用于...

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

    在无认证模式下,服务器与客户端的 Web 通信过程是以明文实现的。客户端可以使用协议分析器来捕获和分析 HTTP 会话。 2. 单向认证(仅服务器需要身份认证) 在单向认证模式下,服务器需要安装证书服务并颁发证书。...

    F.rar_CA认证

    这个压缩包很可能是为了介绍或实现RSA大数据算法在CA认证过程中的应用。 RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是目前最广泛使用的公钥加密技术之一。它的核心原理是...

    linux下搭建CA认证服务器并认证服务.doc

    在Linux环境下搭建一个自定义的CA认证服务器不仅可以帮助我们更好地理解PKI(Public Key Infrastructure,公钥基础设施)的工作原理,还能为内部网络环境提供一种高效且经济的认证机制。本文将详细介绍如何在Linux...

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

    本文利用Java技术实现客户端数字证书的签名和验证,关键在于理解数字签名的工作原理。数字签名是使用发送者的私钥对消息或文档进行加密的一种方式,接收者或其他人可以使用发送者的公钥来验证签名。这个过程确保了...

    基于SSL的身份认证和访问控制实现原理.pdf

    实现基于SSL的身份认证和访问控制的原理,实际上是建立在网络通信双方之间的安全信任机制之上。通过技术手段确保身份的真实性和信息传输的机密性、完整性和不可否认性,再通过不同的授权和认证方法实现细粒度的访问...

    CA电子认证服务系统源代码.zip

    CA电子认证服务系统是用于确保网络通信安全的...这些源代码对于理解和学习CA系统的工作原理,以及自定义和扩展认证服务非常有价值。开发者可以通过深入研究源代码,了解如何实现一个符合国际标准的电子认证服务系统。

    CA认证在医院互联网技术信息安全与运用中的研究.zip

    一、CA认证的基本原理 CA认证基于公钥基础设施(PKI,Public Key Infrastructure)体系,通过一对非对称密钥进行数据加密和解密。每个用户拥有一对密钥,一把是私钥,用于解密和签名;另一把是公钥,用于加密和验证...

    PKI公钥基础和CA原理

    PKI公钥基础和CA原理 PKI(Public Key Infrastructure)公钥基础设施是指使用非对称密码算法原理和技术来实现并提供安全服务的具有通用性的安全基础设施。它是一种遵循标准的利用公钥加密技术为电子商务的开展提供...

    android访问自签CA的Https SSL双向认证(j2SE也能使用)

    本篇文章将深入探讨如何在Android应用中实现对自签CA的HTTPS SSL双向认证,并且这些实现方法同样适用于Java SE(J2SE)环境。 首先,我们需要了解HTTPS的基本原理。HTTPS是HTTP协议的安全版本,它通过SSL/TLS协议来...

    精通PKI网络安全认证技术与编程实现(源码)

    本资料主要围绕PKI的理论基础、实现原理以及编程应用进行深入探讨。 在第2章中,我们通常会学习到PKI的基本概念和原理,包括公钥和私钥的概念,非对称加密算法如RSA、ECC的工作方式,以及证书的结构和作用。这一章...

    netty实现SSL/TSL双向加密认证示例

    通过对这些代码的分析和学习,可以更好地理解 Netty 中的 SSL/TLS 双向认证工作原理。 总结,Netty 提供了强大而灵活的工具来实现 SSL/TLS 安全通信,包括双向认证。通过正确配置 `SslContext`、处理通道处理器和...

    CA数字证书原理、算法、应用领域

    通过数字证书,我们可以实现安全的数据传输、身份认证以及数字签名等功能。随着信息技术的发展,数字证书的应用越来越广泛,从电子商务、金融交易到政府服务等多个领域都离不开数字证书的支持。理解数字证书的工作...

    精品软件工具--简单的CA认证系统软件大型实验周的作品,实现了一个包含X.509证书的申请,审核,撤销等功能的简单CA.zip

    【标题】中的“精品软件工具--简单的CA认证系统软件大型实验周的作品”表明这是一个用于学习或教学目的的软件项目,其主要功能是实现一个基础的证书权威(CA)系统。CA在信息技术领域中扮演着至关重要的角色,它负责...

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

    标题"PKI/CA与数字证书技术大全"暗示了主题是关于公钥基础设施(Public Key Infrastructure, PKI)和认证授权机构(Certification Authority, CA),以及与之相关的数字证书技术。这是一套全面的资料,旨在帮助读者...

    一种基于Python+Nginx架构的双向CA系统设计与实现.pdf

    最后,整个双向CA系统的设计充分考虑了与第三方系统的兼容性、扩展性以及易用性,可以为运营商提供增值业务的支撑,并且在用户体验和安全性方面都较传统的单向CA系统有了显著的提升。系统通过灵活的设计和高效的数据...

    CA测试简单代码段

    在IT行业中,CA(Certification Authority)通常指的是认证权威机构,它在网络安全中扮演着重要角色,用于发放和管理数字证书。RA(Registration Authority)则是注册权威,是CA的一个组成部分,负责用户身份验证和...

    哈工大密码学实验(CA证书认证系统)

    在哈工大的信息安全专业课程中,密码学是一个至关重要的领域,它涉及到数据保护、网络安全以及数字认证等多个核心概念。CA(Certificate Authority)证书认证系统是密码学中的关键组成部分,用于建立网络上的信任...

Global site tag (gtag.js) - Google Analytics