SSL/TLS协议及Openssl工具的实现

前言

早期互联网数据传输是基于TCP/IP模型完成数据交换,其各层对传输的数据包进行各协议的封装,从数据的发送方到接收方进行的数据交换都是基于明文传输。在传输的过程中数据的可以被中间人进行拦截或抓取,威胁了数据的保密性(窃听、通信量分析)、数据的完整性(更改、伪装、重放、否认)、数据的可用性攻击(拒绝服务DOS及DDOS)。为了了达到安全,出现了技术的解决方案:加密和解密来抵御攻击。

加密和解密算法和协议

1、对称加密:

  • 特性:
    • 1、加密和解密使用同一密钥,但双方加密算法可以不同
    • 2、将原始数据分割成固定大小块,逐个进行加密
    • 3、加解密速度比较快
  • 缺点:
    • 1、密钥过多
    • 2、密钥分发困难
  • 用途:
    • 常见用于数据传输过程中的数据加密,
  • 常见算法:
    • DES : Data ,基于64位明文产生64个密文,或者64位密文产生64位明文
    • 3DES: triple DES
    • AES : advanced Encryption standard,采用128、192、256、384位加密机制
    • Blowfish
    • Twofish
    • IDEA
    • RC16
    • CAST5

2、非对称加密(公钥加密)

  • 特性:
    • 1、密钥分为公钥和私钥,密码都是成对出现。
    • 2、私钥可以解公钥加密的数据,公钥也可以解私钥加密的数据
    • 3、公钥从私钥中提取产生,可以公开给所有人,称之为Public Key
    • 4、私钥通过工具创建,使用者自己留存,必须保证其私密性,称之为Secret Key
  • 缺点
    • 加解密速度慢,一般比对称加密要慢3个量级(一个量级是10倍)
    • 中间人攻击
  • 用途
    • 1、数字签名
      • 主要用于让接收方确认发送方的身份
    • 2、密钥交换
      • 发送方使用公钥加密一个对称密钥,并发送给对方
    • 3、数据加密
数字签名及密钥交换过程说明:
  • 1、发送方使用单向加密算法计算数据的特征码,用其私钥加密特征码,并附加在数据后面,
  • 2、发送方再使用对称加密算法生成密钥,加密整个数据,并拿到对方的公钥,加密对称加密的密码,发送给对方
  • 3、对方收到后使用自己的私钥解密,拿到对称加密算法的密码,再使用密码解密整个数据。

身份验证机制的实现:发送方使用自己的私钥加密数据后,接收方拿对方发布的公钥解密其数据,这个过程被称之为身份验证

密钥交换机制的实现: 发送方使用对方的公钥加密其密码,接收方使用自己的私钥解密后可以得到其密码,这个过程被称之为密钥交换

  • 常见算法
    • RSA : 能同时实现加密解密
    • DSS : Digital signarure standard
    • DSA : 只能实现签名,不能实现加解密

3、单向加密

  • 特性:
    • 1、定长输出
    • 2、雪崩效应
    • 3、只加密不能解密
  • 用途:
    • 实现数据的完整性验证
  • 常见算法:
    • MD5 : message digest5,固定128位的定长输出
    • sha1 : secure hash algorithm ,固定160位的定长输出
    • sha224,sha256,sha384,sha512

密钥交换机制(IKE ,Internet Key Exchange)

  • 实现算法:

    • RSA
    • ECDH(随圆曲线DH)
    • ECDHE(临时随圆曲线DH)
    • 公钥加密
    • DH(deffie-hellman)
  • DH交换密钥的实现原理
      A: p,g (生成两个大数)
      B: p,g(生成两个大数)
      
      A: x(生成一个随机数)
          --> p^x%g ---->(发送给B)
      B: y(生成一个随机数)
          -->p^y%g ----> (发送给A)
          
      A:(p^y%g)^x == p^yx%g 
      B: (p^x%g) ^y == p^xy%g(算得的密码都一样)
    

为什么会有CA机构的出现

由于基于公钥和私钥机制进行密钥交换时,会有中间人攻击的情况发生。故我们需要有一个第三方机构帮忙认证证书的真实性,不会被第三方利用。这个情况下,出现了签证机构,即CA。

CA颁发证书的机制

  • 1、客户生成相应的私钥,并提取公钥
  • 2、向CA机构发送申请信息,其中需要提供主体名称、主体公钥、主体的唯一标识,生成一个签署请求文件。
  • 3、CA机构对其提供的请求文件提取特征码,使用自己的私钥对特征码签名,生成证书(证书中包含信息请见以下)

PKI(Public infrastructure,公钥基础设施)

  • 四个组件组成
    • 签证机构 : CA
    • 注册机构 : RA
    • 证书吊销列表 : CRL
    • 证书存取库 : CB
  • 证书的基本格式(X.509标准)
    • 1、证书序列号
    • 2、序列号
    • 3、签名算法ID
    • 4、发行者名称
    • 5、有效期限
    • 6、主体名称
    • 7、主体公钥
    • 8、发行者的唯一标识
    • 9、主体的唯一标识
    • 10、扩展
    • 11、发行者的签名

加密通信的实现协议

  • SSL (Secure socket layer)

由网景公司研发,SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层:SSL记录协议(SSL Record Protocol):它建立在可选的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。SSL握手协议(SSL Handshake Protocol),它建立在SSL记录协议之上, 用于在实际的数据传输之前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
* ######协议版本
* V1.0
* V1.2
* V3.0

  • TLS (Transport layer security)

TLS是开源SSL的实现,由IETF公司于1999年发布,其支持多种算法。TLS彩分层设计:
* 最底层:基础算法原语的实现,AES,RSA,MD5
* 向上一层: 各种算法的实现
* 再向上一层: 组合算法实现的半成品
* 再向上:用于各种组件拼装而成的各种成品密码学协议软件

    * 协议版本:
        * V1.0 
        * V1.1
        * V1.2(目前主流版本)
        * V1.3

Handshake握手过程(无需验证客户端证书)

动作 发送方
Client hello Client
(2)Server Hello Server
(3)Certificate Server
(4)Server hello done Server
(5)Client Key Exchange Client
(6)Change cipher spec Client
(7)Finished Client
(8)Change cipher spec Server
(9)Finished Server
  • 1、TLS客户端通过Client Hello消息发送所支持的TLS版本、加密算法、压缩算法、密钥交换算法、MAC算法等信息发送给TLS服务端
  • 2、TLS服务端确认本次通信采用TLS版本加密通信,并通过Server Hello消息通知SSL客户端,并将自己的公钥信息的数字证书发送给TLS客户端
  • 3、服务端发送Server hello Done消息,通知客户端版本和加密套件协商结束,开妈进行密钥交换
  • 4、客户端验证服务端的证书合法性后,利用证书中的公钥加密客户端随机生成的premaster secret(随机数字做为密码),发送给服务端
  • 5、客户端发送Change cipher spec消息,通知服务端后续采用协议商好密钥和加密方法进行加密和MAC计算
  • 6、客户端计算已交互的所有握手信息(除Change cipher spec消息)进行Hash值计算,并使用协商好的密钥进行加密Hash值,并通过Finished消息发送给服务器,服务端利用同样的方法计算已交互的握手消息的Hash值,并与解密的Hash值比较,如果二者相同,则证明密钥和加密套件协商成功
  • 7、同样服务端也会发送Change cipher spec消息,通知客户端后续报文采用协商好的密码和加密套件处理Hash值,客户端利用同样的方法计算已交互的握手消息的Hash值,并与之对比,如果相同则证明密钥和套件协商成功

Handshake握手过程(验证客户端的证书过程)

动作 发送方
Client hello Client
(2)Server Hello Server
(3)Certificate Server
(4)Certificate Request Server
(5)Server hello done Server
(6)Certificate Client
(7)Client Key Exchange Client
(8)Certificate Verify Client
(9)Change cipher spec Client
(10)Finished Client
(11)Change cipher spec Server
(12)Finished Server

客户端的身份验证是可选的, 由服务器决定是否验证客户端的身份(银行网银类似是需要验证客户端的身份)

  • 1、服务器发送Certficate Requset消息,请求客户端的证书
  • 2、客户端通过Certificate消息将携带自己的证书发送给服务端
  • 3、服务端验证该证书的合法性
  • 4、客户端计算已交互的握手信息、主密钥的hash值,利用自己的私钥对其进行加密,发送给服务端
  • 5、服务端计算已交互的握手信息,主密钥的hash值,利用客户端的公钥解密后,进行hash值对比,如果相同则客户端身份验证成功
说明:change cipher spec消息属于SSL密码变化协议,其他握手过程交互的消息均属于SSL握手协议,统称为SSL握手消息。计算Hash值,指的是利用Hash算法(MD5或SHA)将任意长度的数据转换为固定长度的数据

OpenSSL开源软件

1、简介

Openssl是开源软件,各应用程序可以使用openssl进行安全通讯,避免窃听、同时确认另一端连线者的身份,openssl被广泛应用在网页服务器之上。其是C语言所写,实现了基本的加密功能,也是SSL/TLS协议的应用实现。此软件是以Eric Young以及Tim Hudson两人所写的SSLeay的分支,于1998年12月发布第一个版本

2、Openssl的版本
  • V0.91c (1998年12月发布)
  • V1.0.1 : 支持TLS v1.2(2012年3月发布)
  • V1.0.2 (2015年1月发布)
3、OpenSSL的组成部分:
  • 加密解密库:Libencrypt,主要开发者使用
  • Libssl : 实现SSL安全通信机制的库
  • OpenSSL工具:多用途命令行工具
openssl加密工具
对称加密工具:openssl enc
  • 加密:openssl enc -e -des3 -a -salt -in fstab -out fstab.cipher

  • 解密 :openssl enc -d -des3 -a -salt -out fstab -in fstab.cipher

      -e : 加密
      -d : 解密 
      -a : 以base64编码进行输出
      -salt : 加盐
      -in :指定从那个文件读入
      -out : 输出至那个文件
    
单向加密工具:openssl dgst
  • openssl dgst -md5 fstab

      -md5 :指定算法
    
生成用户密码:openssl passwd
  • openssl passwd -1 -salt 12345678

      -1 : 指定加密算法
      -salt : 加盐,并且为123456
    
生成随机数:openssl rand
  • openssl rand -base64 10 (base64编码格式)
  • openssl rand -hex 10 (16进制编码格式)
  • openssl passwd -1 -salt $(openssl rand -hex 4)
生成私钥:openssl genrsa
  • openssl genrsa 1024 > /tmp/mykey.private
  • openssl genrsa 1024 -out /tmp/mykey.private 1024
  • (umask 077;openssl genrsa -out /tmp/mykey.private 1024)
提取公钥:openssl rsa
  • openssl rsa -in /PATH/FROM/private.key -pubout
  • openssl rsa -in /PATH/FROM/private.key -pubout -out pub.key
查看证书:opensll x509
  • openssl x509 -in httpd.crt -noout -serial -subject :只查看序列号和subject
Openssl CA的工作目录
  • /etc/pki/CA
Openssl配置文件
  • /etc/pki/tls/openssl.cnf
    • $dir/certs : 签发的证书存放位置
    • $dir/crl : 吊销的证书存放位置
    • $dir/index.txt : 证书的索引信息
    • $dir/serial : 索引序列号
    • $dir/private/cakey.pem : CA自己的私钥
    • $dir/cacert.pem : CA公钥位置
    • [req] : 此ID中定义了签署证书的属性

构建CA及签发证书的步骤

########自建CA########
1、生成私钥
    (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2、生成自签证书
    openssl req -x509 -new -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
3、为CA提供所需的目录及文件
    mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
4、建立证书索引序列号
    echo 01 > /etc/pki/CA/serial
    
########客户端生成私钥及生成签发证书请求########
1、到客户端相应的目录中,生成私钥 
    mkdir /etc/httpd/ssl
    (umask 077; openssl genrsa -out httpd.key 2048)
2、生成签署请求文件(实为导出公钥信息)
    openssl req -new -key httpd.key -out httpd.csr -days 365

########服务器端签署证书########
1、openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

#######拷贝签署的文件至客户端指定目录#######
1、cp /tmp/httpd/csr /etc/httpd/ssl

CA吊销证书

1、客户端获取要吊销证书的serial
2、CA端主机执行吊销操作
    openssl ca -revoke /etc/pki/CA/newcert/SERIAL_ID(证书的真正序列号)
3、生成吊销证书的吊销编号(只是第一次吊销证书时执行)
    echo 01 > /etc/pki/CA/crlnumber
4、更新证书吊销列表
    openssl ca -gencrl -out thisca.crl
    
#####查看crl文件
openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容

  • 互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和...
    拉肚阅读 2,594评论 0 6
  • 本文摘自 腾讯bugly 的文章《全站 HTTPS 来了》,内容有修改。 大家在使用百度、谷歌或淘宝的时候,是否注...
    bnotes阅读 3,629评论 1 9
  • 一、作用 不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。 (1)窃听风险...
    XLsn0w阅读 10,465评论 2 44
  • 本文转载,出处如下:数字证书原理 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了...
    随安居士阅读 1,667评论 1 8
  • 记得去年2月底,你骂我骂的好惨,我都不知道怎么得罪你了,我就像你的助理一样,给你们跑去买烟买酒, 都没能和你吃上一...
    君君之阅读 113评论 0 0