- 浏览: 356651 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
missfmaster:
这框架好特么底层。
Terracotta设计原理分析--(部分内容来自官方描述) -
小黄牛:
很好不错!分享一个在电商购物支付流程中,在各大参与者系统中可能 ...
分布式事务设计-两段式提交 -
zhglhy:
学习了,感谢分享
JAVA垃圾回收分析 -
talentluke:
如果在事务一中出现故障,数据库是可以回滚但消息队列不能回滚,队 ...
用消息队列和消息应用状态表来消除分布式事务(转载) -
langmanxingkong123:
谁说jedis不能存集合类的数据。乱说。。。
redis jredis jedis 使用
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:指向客户证书列表
发表评论
-
王者荣耀是用什么语言开发的!
2020-10-29 19:24 11372017年什么最火? 不用问,肯定是人人都“ ... -
王者荣耀是用什么语言开发的!
2020-10-29 19:04 02017年什么最火? 不用问,肯定是人人都在撸的“王 ... -
用消息队列和消息应用状态表来消除分布式事务(转载)
2012-11-21 11:12 3286由于数据量的巨大,大 ... -
CA认证原理以及实现(上)
2012-09-10 20:00 49290原理基础数字证书为发 ... -
企业追逐的--网络热点(云、海量数据、虚拟化)(下)
2012-06-28 21:58 1443云管理平台云是IT实现,是造出来的,不是买来的。我们可以买服务 ... -
企业追逐的--网络热点(云、海量数据、虚拟化)(上)
2012-06-28 21:08 1606云之所以热,是因为现在以及未来市场的业务推动力(回报率),现在 ... -
Terracotta Server[兵马俑]集群
2012-06-14 01:23 10737Terracotta的介绍以及原理在我之前的文章中已经做了相关 ... -
Local Cache + Server Cache
2012-05-27 00:01 785其实下面说的一些设计思路来源于一些开源的缓存软件,比如Ehca ... -
Web请求-异步模式
2012-05-26 22:45 268Comet技术已经不算是 ... -
分布式事务设计-三段式提交
2012-05-25 20:24 5480前面的文章提到的两段 ... -
分布式事务设计-两段式提交
2012-02-08 17:16 14093事务是一个很重要的概念,它必须满足ACID特性,在单机的数据库 ... -
架构设计要“注意点”
2011-09-08 14:24 370资源有限注意点:系统设计的时候总是估摸不到会有大数据量从远端传 ... -
替代分布式事务策略
2011-06-10 19:59 2209由于数据量的巨大,现 ... -
你符合成为一个架构设计师的特征吗?
2011-03-30 12:28 557其实想写这篇文章也是 ... -
缓存客户端集群
2011-03-18 17:12 1623Memcached Cache是集中式Cach ... -
Netlog中数据库演变过程
2011-03-18 15:45 476Netlog拥有4000万活跃用户,每个月有超过5000万的独 ... -
如何检测一台机器是否宕机?(转载)
2011-03-15 20:19 1729检测一台机器是否宕机 ... -
淘宝OceanBase设计(转载)
2011-03-14 16:26 1335OceanBase有什么特点 ... -
EhCache辅助spring Acegi
2010-09-14 16:36 2100因为在项目中想通过缓存来acegi的整合,因此选用了Ehcac ... -
Facebook运用软件
2010-08-12 15:51 16462010年6月,Facebook现在的经营规模,诸多传统服务器 ...
相关推荐
实验二 数字证书应用 数字证书实验详细步骤原理 利用数字证书建立安全Web通信 利用数字证书实现电子邮件安全
a. 接收者与发送者双方各自利用RSA算法生成自己的公私钥,并生成数字证书,并在一个CA进行认证。 b. 在DH密钥交换阶段,A生成A的DH协商密钥用于发送给B,该密钥与接收方私钥生成最终通信密钥。发送DH密钥时,A先用...
pki入门学习资料.rar,这是我在网上收集到的PKI学习资料 内含: CA认证原理.doc LDAP介绍.doc PKI原理.doc SSL原理.doc 基于SSL的身份认证和访问控制实现原理.pdf RSA加密.doc ......
以 PKI体系作为基础,利用 CA颁发的数字证书进行安全认证和文档签名,将数字证书的私钥存放于 USB型智能卡中,对于电子文档首先进行对称加密,然后利用数字信封原理加密对称密钥,确保密钥传递中的安全性以及只有指定的人...
CA证书:有认证授权中心(CA中心)发行的数字证书。 数字证书:是各实体(消费者、 户、企业、银行等)在网上进行信息交流及商务活动的身份证明,在电子交易的各个环节、交易各方都需要验证对方数字证书的有效性,...
直接匿名证言(DAA)既解决了隐私CA的瓶颈问题,又实现对TPM的认证和匿名,是当前可信计算平台身份证明最好的理论解决方案之一,TCG在TPMv1.2中将其作为解决平台身份证明问题的标准.但该标准中仅仅重点描述了DAA实现...
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 ...
若两者相符,即MD-1= MD-2,则可肯泄数字 证书已由CA用其私钥签名,否则用户不信任该证书,将貝拒绝 证书认证过程: 生成,存储与发布数字证书 用户发岀登录请求 服务器随机生成挑战值 用户对随机挑战值签划 服务器向...
它在功能上实现了通讯自动化(CA)、办公自动化 (OA) 和管理自动化 (BA), 以综合布线系统为基础,以计算机网络为桥梁,全面实现对通讯系统、办公自动化系统 的综合管理。 门禁系统作为一项先进的高科技技术防范和...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地...
它在功能上实现了通讯自动化(CA)、办公自动化 (OA) 和管理自动化 (BA),以综合布线系统为基础,以计算机网络为桥梁,全面实现对通讯系统、办公自动 化系统的综合管理。 门禁系统系统作为一项先进的高科技技术防范...
上面我们已经简要的讲述了一些XML的基本原理,我们来看看它们之间的关联以及它们是如何工作的,先看这里一张图: 1.XML描述数据类型。例如:"King lear"是一个标题元素; 2.CSS储存并控制元素的显示样式。例如...
第二章LDAP 存储结构原理.......................................................................................................22 第一节树状组织............................................................