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文件中找到相应的地方:

Xml代码   收藏代码
  1. //构建ca子目录(证书创建时,用到下述目录,最终在certs目录中获得证书文件)  
  2. echo 构建已发型证书存放目录 certs  
  3. mkdir certs  
  4. echo 构建新证书存放目录 newcerts  
  5. mkdir newcerts  
  6. echo 构建私钥存放目录 private  
  7. mkdir private  
  8. echo 构建证书吊销列表存放目录 crl  
  9. mkdir cr1   
  10. //构建相关文件,完成后可以进行证书的构建和签发工作  
  11. echo 构建索引文件 index.txt  
  12. echo 0>index.txt  
  13. echo 构建序列号文件 serial  
  14. echo 01>serial  
  15.       //构建根证书   
  16. echo 构建随机数 private/.rand  
  17. openssl rand -out private/.rand 1000  
  18. //构建根证书私钥  
  19. echo 构建根证书私钥 private/ca.key.pem  
  20. openssl genrsa -aes256 -out private/ca.key.pem 2048  
  21. //完成密钥构建操作后,需要生成根证书签发申请文件ca.csr  
  22. //生成根证书签发申请  
  23. echo 生成根证书签发申请 private/ca.csr  
  24. 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"  
  25. //执行完后此处又要输入根证书密码  
  26. //得到根证书签发申请文件后,可以将其发送给CA机构签发,也可以自行签发根证书  
  27. echo 签发根证书 private/ca.cer    
  28. openssl x509 -req -days 1000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer  
  29. //执行完后此处又要输入根证书密码  
  30. echo 根证书转换 private/ca.p12  
  31. openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certs/ca.cer -out certs/ca.p12  
  32. //执行完后此处又要输入根证书密码  
  33. //构建服务器证书  
  34. echo 构建服务器私钥 private/server.key.pem  
  35. openssl genrsa -aes256 -out private/server.key.pem 2048  
  36. //服务器证书签发申请  
  37. echo 生成服务器证书签发申请 private/server.csr  
  38. 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"  
  39. //执行完后此处又要输入根证书密码  
  40. //根证书签发服务器证书   
  41. echo 签发服务器证书 private/server.cer  
  42. 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  
  43. //执行完后此处又要输入根证书密码  
  44. //将OpenSSL产生的数字证书转换为PKCS#12编码格式  
  45. echo 服务器证书转换 private/server.p12  
  46. openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12  
  47. //执行完后此处又要输入根证书密码  
  48. //构建客户证书  
  49. echo 产生客户私钥 private/client.key.pem  
  50. openssl genrsa -aes256 -out private/client.key.pem 2048  
  51. //执行完后此处又要输入根证书密码  
  52. //产生客户证书签发申请  
  53. echo 生成客户证书签发申请 client.csr  
  54. 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"  
  55. //执行完后此处又要输入根证书密码  
  56. //根证书签发客户证书  
  57. echo 签发客户证书 certs/client.cer  
  58. 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  
  59. //执行完后此处又要输入根证书密码  
  60. //将获得客户证书转换JAVA语言可以识别的PKCS#12编码格式  
  61. echo 客户证书转换 certs/client.p12  
  62. openssl pkcs12 -export -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12  
  63. //完成了双向认证的所需的全部证书  

 

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文件中配置双向认证:

Xml代码   收藏代码
  1. <Connector port="443" maxHttpHeaderSize="8192"  
  2.           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"  
  3.    sslProtocol="TLS" keystoreFile="conf/server.p12"    
  4.    keystorePass="123456" keystoreType="PKCS12"                               
  5.           truststoreFile="conf/ca.p12" acceptCount="100" scheme="https" secure="true"  
  6.           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的认证

 

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

Java代码   收藏代码
  1. for(Enumeration en = request.getAttributeNames();  
  2.      en.hasMoreElements();){  
  3.      String name = (String)en.nextElement();  
  4.      out.println(name);  
  5.      out.println(" = " + request.getAttribute(name));  
  6.      out.println();  
  7. }  

 

可以看到如下结果:


上述有些相关属性解释:
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:指向客户证书列表

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
先运行safechat包里的greetigserver.class,之后运行greetingclient.class即可。 如遇报错,请参考:https://blog.csdn.net/fengzun_yi/article/details/104497160 实现过程: 1. 采用TCP通信协议完成接收者发送者双方的消息传递。 2. 利用Diffie-Hellman密钥交换协议生成对称加密通信的通信密钥。 3. 为防止间人攻击,采用RSA非对称加密算法协助DH算法完成密钥交换。具体过程如下: a. 接收者与发送者双方各自利用RSA算法生成自己的公私钥,并生成数字证书,并在一个CA进行认证。 b. 在DH密钥交换阶段,A生成A的DH协商密钥用于发送给B,该密钥与接收方私钥生成最终通信密钥。发送DH密钥时,A先用自己的私钥加密DH协商密钥,再去CA获得一个真实的B的公钥,用B的公钥对加密过的协商密钥再做一次加密,发送给B。(因为是用B的公钥加密过,只有B有B的私钥,所以接收信息只有B自己可以解密查看,又因为是用A的私钥加密过的,只有A有A的私钥,所以只有用A的公钥可以进行解密,所以可以保证协商密钥确实是A发送过来的,而且发送的信息也无法被间人解密。)B收到信息之后,先用自己的私钥解密,然后去CA获得A的公钥再对消息解密一次,获得A的DH密钥。B发给A的过程同上。 c. 之后双方执行DH生成本地密钥的过程。A利用B发送过来的密钥和A的DH私钥生成通信密钥。B利用A发送过来的密钥和B的DH私钥生成通信密钥。根据DH原理,两者生成的通信密钥是相同的。 4. 利用上一步生成的通信密钥,采用AES对称加密算法进行加密通信。 为了方便起见,并没用对A和B双方进行颁发证书的操作,A的公钥默认B已经从CA获得,B的公钥默认A已经从CA获得。并且采用java控制台交互,仅仅为演示原理及简单效果。
电子商务:从广义上讲,电子商务是利用现有的计算机硬件设备、软件和网络基础设施,通过一定的协议连接起来的电子网络环境进行各种各样商务活动的总称。从狭义上讲,电子商务是在技术、经济高度发达的现代社会里,掌握信息技术和商务规划的人,系统化运用企业内联网(intranet)外联网(Extranet)及Internet等现代系统,进行高效率,低成本的商务活动。 Internet:连接了无数个遍及全球范围的广域网和局域网的互联网络。 B2B:商业机构(或企业、公司)使用Internet 或各种 商务网络向供应商(企业或公司)订货和付款。 B2C:电子商务是以Internet为主要手段,有商家或企业通过网站向消费者提供商品和服务的一种商务模式。 C2C:就是通过为买卖双方提供一个在线交易平台,使卖方可以主动提供商品上网拍卖,而买方可以自行选择商品进行竞价。 B2G:指政府部门与企业之间通过网络进行各项商务活动 。 电子支付:是客户首先以一定金额的现金或存款从发卡者处兑换得代表相同金额的数据,通过使用某些电子化方法将该数据直接转移给支付对象。 银行卡:是商业银行向社会公开发行,具有消费信用、转账结算、存取现金等全部或部分功能、作为支付结算工具的各类卡的统称。包括信用卡、借记卡等,客户可使用银行卡随时、随地完成在线支付操作,有关的个人信息、信用卡及密码信息,经过加密后直接传达到银行进行支付结算。 电子现金:是一种以数据形式流通、能被消费者和商家普遍接受、通过互联网购物时使用的数字化货币。用户可以随时通过互联网从银行账户上下载电子现金,从而保证了电子现金使用的便捷性。 电子支票:是一种借鉴纸张支票转移支付的优点,利用数字传递将钱款从一个账户转移到另一个账户的电子付款形式。这种电子支票的支付时在与商户及银行相连的网络上以密码方式传递的,大多数使用公用关键字加密签名或个人身份证号码(PIN)代替手写签名。 智能卡:是一种大小和普通卡片相仿的塑料卡片,内含一块直径1cm左右的硅芯片,具有存储信息和进行复杂运算的功能。 网上银行:是指通过因特网,将客户的电脑终端连接至银行网站,实现将银行服务直接送到客户办公室或家的服务系统,使客户足不出户就可以享受到综合、统一、安全、实时的银行服务,包括提供对私、对公的各种零售和批发的全方位银行业务,还可以为客户提供跨国的支付与清算等其他的贸易、非贸易的银行业务服务。 物流:是物质资料从供给者到需求者的物理运动,主要是创造时间价值和场所价值,有时也创造一定加工价值的活动。 数据保密:保证在Internet网络上传递的数据信息不被第三方监视和窃取并使用该数据。 数据完整性:保证数据的完整性就是要保证在公共Internet网络上传递的数据信息不被篡改。 防火墙:是一种位于两个或多个网络间,实施网络之间访问控制的组件集合,是维护个人计算机或局域网安全的防护措施的总称。它是专门用来拦截、过滤不安全的信息,控制非法用户进入的软件。 CA证书:有认证授权心(CA心)发行的数字证书。 数字证书:是各实体(消费者、 户、企业、银行等)在网上进行信息交流及商务活动的身份证明,在电子交易的各个环节、交易各方都需要验证对方数字证书的有效性,从而解决相互间的信任问题。 电子商务网站设计原理重点全文共8页,当前为第1页。虚拟专用网:用于Internet交易的一种专用网络,在两个系统之间建立安全的信道(或隧道),用于电子数据交换。 电子商务网站设计原理重点全文共8页,当前为第1页。 信息检索:信息检索是指将信息按一定的方式组织和存储起来,并根据信息用户的需要找出有关信息的过程。所谓的电子商务信息检索,是指交易方或产品服务提供方根据自己的需求,按照一定的检索方式查找所需信息的过程。 指令:是指示计算机执行某种操作的命令。指令必须是二进制形式的代码,由操作码、操作数地址两部分构成。 程序:是由有序排列的指令组成的。 数据库:是长期储存在计算机内、有组织、可共分享的数据集合。 数据库管理系统DBMS:数据库管理系统是为数据库的建立、使用和维护配置的软件。 关系型数据库:关系型数据库是以关系数学模型来表示的数据。关系数学模型以二维表的形式来描述数据。 数据仓库:(DW)是面向主题、集成、不可更新并随时间不断变化的数据的集合。数据仓库用来支持企业或组织的决策分析处理。 数据挖掘(DM):就是从大量、不完全、有噪声、模糊、随机的实际应用数据,提取隐含在其、人们事先不知道但又潜在有用的信息和知识的过程。 OSI/RM:是OSI在网络通信方面所定义的开放系统互连模型,1978年ISO(国际化标准组织)定义了一个开放协议标准。 TCP/IP:传输控制协议/互联网协议。TCP协议时IP协议的高层协议,TCP在IP之上提供了一个可靠的链接方式的协议。TCP

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒙奇·D·路飞-

感谢老板您就是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值