`
yale
  • 浏览: 356651 次
  • 性别: 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
分享到:
评论

相关推荐

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

    实验二 数字证书应用 数字证书实验详细步骤原理 利用数字证书建立安全Web通信 利用数字证书实现电子邮件安全

    java实现的简易版网络聊天加密通信程序

    a. 接收者与发送者双方各自利用RSA算法生成自己的公私钥,并生成数字证书,并在一个CA进行认证。 b. 在DH密钥交换阶段,A生成A的DH协商密钥用于发送给B,该密钥与接收方私钥生成最终通信密钥。发送DH密钥时,A先用...

    pki入门学习资料.rar

    pki入门学习资料.rar,这是我在网上收集到的PKI学习资料 内含: CA认证原理.doc LDAP介绍.doc PKI原理.doc SSL原理.doc 基于SSL的身份认证和访问控制实现原理.pdf RSA加密.doc ......

    基于智能卡和数字信封的电子文档安全认证模型 (2009年)

    以 PKI体系作为基础,利用 CA颁发的数字证书进行安全认证和文档签名,将数字证书的私钥存放于 USB型智能卡中,对于电子文档首先进行对称加密,然后利用数字信封原理加密对称密钥,确保密钥传递中的安全性以及只有指定的人...

    电子商务网站设计原理重点.docx

    CA证书:有认证授权中心(CA中心)发行的数字证书。 数字证书:是各实体(消费者、 户、企业、银行等)在网上进行信息交流及商务活动的身份证明,在电子交易的各个环节、交易各方都需要验证对方数字证书的有效性,...

    基于直接匿名证言的可信平台身份证明协议的设计 (2012年)

    直接匿名证言(DAA)既解决了隐私CA的瓶颈问题,又实现对TPM的认证和匿名,是当前可信计算平台身份证明最好的理论解决方案之一,TCG在TPMv1.2中将其作为解决平台身份证明问题的标准.但该标准中仅仅重点描述了DAA实现...

    企业级Linux服务攻略

    7.4.3 htaccess实现用户认证 7.4.4 实现HTTPS 7.5 企业实战与应用 7.5.1 企业环境及需求 7.5.2 需求分析 7.5.3 解决方案 7.6 本章习题 7.7 字段汇总 第8章 iptables 8.1 iptables原理 8.1.1 防火墙概述 8.1.2 ...

    网络安全复习.docx

    若两者相符,即MD-1= MD-2,则可肯泄数字 证书已由CA用其私钥签名,否则用户不信任该证书,将貝拒绝 证书认证过程: 生成,存储与发布数字证书 用户发岀登录请求 服务器随机生成挑战值 用户对随机挑战值签划 服务器向...

    门禁系统设计方案.doc

    它在功能上实现了通讯自动化(CA)、办公自动化 (OA) 和管理自动化 (BA), 以综合布线系统为基础,以计算机网络为桥梁,全面实现对通讯系统、办公自动化系统 的综合管理。 门禁系统作为一项先进的高科技技术防范和...

    超级有影响力霸气的Java面试题大全文档

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    java 面试题 总结

    但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...

    门禁及考勤系统设计方案.doc

    它在功能上实现了通讯自动化(CA)、办公自动化 (OA) 和管理自动化 (BA),以综合布线系统为基础,以计算机网络为桥梁,全面实现对通讯系统、办公自动 化系统的综合管理。 门禁系统系统作为一项先进的高科技技术防范...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    上面我们已经简要的讲述了一些XML的基本原理,我们来看看它们之间的关联以及它们是如何工作的,先看这里一张图: 1.XML描述数据类型。例如:"King lear"是一个标题元素; 2.CSS储存并控制元素的显示样式。例如...

    LDAP技术,LDAP学习大全

    第二章LDAP 存储结构原理.......................................................................................................22 第一节树状组织............................................................

Global site tag (gtag.js) - Google Analytics