我在这个链接中简单的介绍了下加密解密原理和相关算法及其实现:http://starli.blog.51cto.com/8813574/1671408

CA是什么?为什么需要CA? 先看下面的互联网安全通讯模型!

现在互联网上常用的安全通讯模型

发送方发送数据时执行的步骤如下(分别对应于上图发送方的1、2、3):

1、发送方将需要在互联网上进行安全传输的数据采用单向加密算法提取数据的特征码,然后用自己的私钥加密这段特征码放在数据的尾部;

2、发送方生成一个一次性的对称加密算法的秘钥,然后使用对称加密算法和生成的秘钥将数据和加密后的特征码加密后生成密文;

3、将上一步对称加密用到的秘钥使用接收方的公钥加密后放在密文的后面;随后就可以将数据放到互联网上进行传输。

接收方接收到数据后执行的步骤如下(分别对应于上图接收方的1、2、3):

1、接收方接收到数据后,用自己的私钥解密加密后的对称加密算法的秘钥。(如果能解密则能验证数据的机密性)

2、接收方用解密后得到的对称加密算法的秘钥后使用与发送方同样的对称加密算法解密加密的数据和加密的数据的特征码。

3、接收方使用与发送方相同的单向加密算法提取解密后的数据的特征码,而后使用发送方的公钥对上一步解密得到的加密的数据的特征码(如果能解密,则可以发送接收方的身份),并比较这两个特征码进行比较是否一致。(如果一致,则可以验证数据的完整)。

在上面的通讯过程中,双方都加密时都会用到对方的公钥。由于公钥是公开的,任何人都可以得到并使用。私钥是保密的,只有私钥的拥有者才能使用。那么在互联网上的安全通讯过程中,通讯双方如何可靠的得到对方的公钥呢?这就需要一种手段来实现。CA其实就是实现让通讯双方可靠的得到对方公钥的一种手段。CA的实现方式是通过给通讯者颁发证书,目前通用的证书格式为x509,证书基本格式如下:

CA其实就是一个大家都信任的公信机构,因此如果信任该CA就信任此CA给通讯者颁发的证书,那么就可以放心的使用证书中的公钥跟证书的拥有者通讯。CA要想给客户端发证书,首先就要给自己签署一个自签证书。而且此证书也需要分发给各个信任他的互联网主机。

证书主要有以下几个组件组成(统称为PKI):

证书存取库:证书申请者或拥有者跟RA、CA、CRL打交道的接口

RA(证书注册机构):证书申请者申请证书的机构

CA(证书颁发机构):给证书申请者签署证书的机构

CRL(证书吊销列表):  证书拥有者的私钥丢失所要用到的列表

  PS: PKI全称为公钥基础设施

早期的互联网中,大多数的协议都是明文的,使得在互联网上传输的数据非常的不安全。Netscape公司为了实现数据在互联网上安全传输,就开发了一种实现数据安全传输的名叫SSL的协议,常见的SSL协议共有三个版本SSLv1、SSLv2、SSLv3,目前常用的是SSLv3。后来在开源界也有SSL协议的开源实现TLS,有TLSv1的版本,此版本相当于SSLv3。

TLS(transfer layer security)、SSL(secure socket layer):他们都是一种位于应用层和传输层之间的协议,可以基于TCP和UDP,上层应用可以使用该协议对数据进行加密,从而保证传输数据的安装也可以不使用此协议。因此,大多数人都称ssl是一种位于应用层和传输层之间的半层协议。

如果想使用证书在企业或组织内部进行安全通讯,那么就需要构建私有CA,颁发证书时也有一个流程 ,具体流程和步骤如下:

openssl作为CA时用到的目录或文件

    [root@localhost CA]# rpm -ql openssl    /etc/pki/CA/etc/pki/CA/certs/etc/pki/CA/crl/etc/pki/CA/newcerts           # 新生成的证书的副本存放位置/etc/pki/CA/private/etc/pki/tls/etc/pki/tls/certs/etc/pki/tls/certs/Makefile/etc/pki/tls/certs/make-dummy-cert/etc/pki/tls/certs/renew-dummy-cert/etc/pki/tls/misc/etc/pki/tls/misc/CA/etc/pki/tls/misc/c_hash/etc/pki/tls/misc/c_info/etc/pki/tls/misc/c_issuer/etc/pki/tls/misc/c_name/etc/pki/tls/openssl.cnf       # openssl配置文件信息/etc/pki/tls/private           # CA私钥存放位置

    建立私有CA服务器:

1、给CA自己生成私钥

    [root@ca private]# openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048Generating RSA private key, 2048 bit long modulus.................................+++.........................................................................................+++e is 65537 (0x10001)# 此处-out选项后面跟的文件名必须是cakey.pem。

2、然后提取CA的私钥中的公钥给自己颁发一个自签证书

    [root@ca CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -out cacert.pem -days 36500You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:BEIJINGLocality Name (eg, city) [Default City]:BJOrganization Name (eg, company) [Default Company Ltd]:movekj.comOrganizational Unit Name (eg, section) []:techCommon Name (eg, your name or your server's hostname) []:ca.movekj.comEmail Address []:# 此处-out选项后面跟的文件名必须是cacert.pem。

3、初始化CA工作环境

    [root@ca CA]# touch /etc/pki/CA/{index.txt,serial}[root@ca CA]# echo 00 > /etc/pki/CA/serial[root@ca CA]# cat /etc/pki/CA/serial 00

客户端申请证书    

1、给客户端生成私钥

    [root@http ~]# openssl genrsa -out ~/http.key 2048Generating RSA private key, 2048 bit long modulus...................................................+++....................................................+++e is 65537 (0x10001)

2 、在本地生成证书签署请求

    [root@http ~]# openssl req -new -key ~/http.key -out ~/http.csrYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:BEIJINGLocality Name (eg, city) [Default City]:BJOrganization Name (eg, company) [Default Company Ltd]:movekj.comOrganizational Unit Name (eg, section) []:sellCommon Name (eg, your name or your server's hostname) []:www.movekj.comEmail Address []:Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:

3、将证书请求复制到CA服务器上

    [root@http ~]# scp ~/http.csr root@10.0.0.200:~/    The authenticity of host '10.0.0.200 (10.0.0.200)' can't be established.RSA key fingerprint is 2c:de:35:e7:d4:f1:a2:29:82:86:ff:d3:c4:75:11:42.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '10.0.0.200' (RSA) to the list of known hosts.root@10.0.0.200's password: http.csr                                                                                                                  100% 1005     1.0KB/s   00:00

4、在CA服务器上给客户端签署证书

    [root@ca ~]# openssl ca -in ~/http.csr -out ~/http.crt -days 300Using configuration from /etc/pki/tls/openssl.cnfCheck that the request matches the signatureSignature okCertificate Details:Serial Number: 0 (0x0)ValidityNot Before: Jul  9 02:49:02 2015 GMTNot After : May  4 02:49:02 2016 GMTSubject:countryName               = CNstateOrProvinceName       = BEIJINGorganizationName          = movekj.comorganizationalUnitName    = sellcommonName                = www.movekj.comX509v3 extensions:X509v3 Basic Constraints: CA:FALSENetscape Comment: OpenSSL Generated CertificateX509v3 Subject Key Identifier: 16:91:A6:EA:6B:0D:5C:E8:BC:43:F8:64:52:A8:83:75:33:13:B7:CEX509v3 Authority Key Identifier: keyid:C2:AC:56:05:CD:7F:A0:58:D9:BF:65:9F:37:B4:3B:19:4D:35:21:F2Certificate is to be certified until May  4 02:49:02 2016 GMT (300 days)Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated

5、将证书传给客户端

    [root@ca ~]# scp ~/http.csr root@10.0.0.150:~    The authenticity of host '10.0.0.150 (10.0.0.150)' can't be established.RSA key fingerprint is 5c:ea:49:68:f7:0f:77:d3:4e:82:0d:04:7e:ab:13:01.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '10.0.0.150' (RSA) to the list of known hosts.root@10.0.0.150's password: http.csr                                                                                                                  100% 1005     1.0KB/s   00:00

有了CA颁发的证书之后,互联网上的安全通讯过程如下(以https为例,这个过程也称之为SSL、TLS会话的建立过程):

由于https是基于tcp/443号端口,因此在SSL会话开始之前有TCP的三次握手过程,而后才是SSL:

1、客户端向服务器请求服务器的证书;

2、服务器准备证书,客户端从服务器处下载证书

3、客户端用事先下载在本地的CA证书中的公钥解密从服务器下载下来的证书的数字签名来获得证书主体部分的特征码(如果能解密,则就能验证此证书确实是客户端信任的CA颁发的证书),而后用与同样的算法提取证书主体部分的特征码,并比较两者是否一致。(如果一致,就能验证证书是完整的,没有被人篡改过,后续的通讯过程客户端就用从服务器上下载下来的证书中的公钥来进行加密通讯。

转载于:https://blog.51cto.com/starli/1671772

简述ssl协议及利用openssl创建私有CA相关推荐

  1. openssl创建私有ca

    openssl创建私有ca 1.ssl大概内容 PKI:公钥基础设施结构 CA:证书权威机构,PKI的核心 CRL:证书吊销列表,使用证书之前需要检测证书有效性 证书存储格式常见的X509格式 包含内 ...

  2. 加密解密技术基础及用OpenSSL创建私有CA

    1.加密解密技术基础 (1)进程通信 传输层协议有TCP,UDP,SCTP等,端口号port表示进程地址,进程向内核注册独占使用某端口. 同一主机上的进程间通信方式:进程间通信(IPC), 消息队列( ...

  3. 在企业内部使用openssl创建私有CA

    随着计算机技术的发展,信息网络技术的应用日益深入,这些应用改进了企业工作方式,提高了工作效率.而如何确保在网络中传输的身份认证.机密性.完整性.合法性.不可抵赖性等问题成为企业进一步发展和推动企业信息 ...

  4. openssl 创建私有CA

    创建私有CA: openssl的配置文件:/etc/pki/tls/openssl.cnf 1.创建所需要的文件 #touch index.txt #echo 01 > serial # 2.给 ...

  5. 网络通信中的加密解密及openssl和创建私有CA详解

    本文大纲: 1.为什么网络通信要进行数据加密? 2.数据加密方式有哪些?它们是如何进行加密的? 3.通信中是如何进行数据加密传输的? 4.https方式进行数据传输的具体流程 5.SSL 的实现工具O ...

  6. linux加密解密基础、PKI及SSL、创建私有CA

    linux加密解密基础.PKI及SSL.创建私有CA 1.加密解密基础:            数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡 ...

  7. openssl工具的使用以及创建私有CA

    openssl软件包在安装之后,主要会生成三段重要内容:加密库 ssl相关库文件 openssl命令行工具 下面就来介绍一下openssl命令行工具的使用: openssl和yum类似,有着许许多多的 ...

  8. Openssl加密文件及创建私有CA及证书

    # cat /etc/redhat-release CentOS release 6.6 (Final) # uname -r 2.6.32-504.el6.x86_64 首先我们先演示加密文件的方式 ...

  9. PKI详解与openssl实现私有CA证书签发

    加密解密技术基础 在看这篇文章之前,首先需要有加密解密的技术基础: 安全目标: 保密性:确保通信信息不被任何无关的人看到 完整性:实现通信双方的报文不丢失.数据完整性.系统完整性 可用性:通信任何一方 ...

最新文章

  1. python如何爬虫-如何使用python写爬虫程序
  2. Linux环境下提升普通用户权限(sudo)
  3. 011_TreeMap对键实现了Comparable接口的对象排序
  4. 新秀nginx源代码分析数据结构篇(四)红黑树ngx_rbtree_t
  5. 产品经理岗位将要消亡?后端PM表示别瞎焦虑了
  6. linux进程卡住_鸿蒙系统,Linux? Android?
  7. linux不能到达网关,linux – 在网关服务器上,netNS可以限制一个...
  8. python基础(17)之 JSON
  9. eclipse打包项目为aar_新生日常牢骚之作业打包
  10. python-time时间模块
  11. Java 数据库连接池的技术选型都应考虑哪些要素
  12. element-ui按需引入
  13. Oracle 单实例 迁移到 RAC 实例 -- 使用RMAN 异机恢复
  14. Linux中svn提交文件后自动同步更新到网站目录
  15. 网络机顶盒固件编辑器_电信机顶盒刷固件补丁下载
  16. 车牌限行——条件分歧
  17. 国医眼科大师-唐由之-干眼症熏方
  18. element-ui Form表单验证
  19. 开发润乾报表过程:因为内容过多分页导致的这条线
  20. javaweb实现购物车功能

热门文章

  1. 轻量级的jQuery表单验证插件 - HAPPY.js
  2. [推荐]最强最全的电脑硬件知识
  3. [原创]软件测试思维方式
  4. 直播系统开发:功能创新提升用户留存
  5. 转义符,re模块,rangdom随机数模块,
  6. 技术分享连载(十八)
  7. NoSQL and Redis
  8. 尚硅谷Java视频教程导航(学习路线图)
  9. Json在Java后台的操作
  10. 腾讯3366小游戏站算法被破解