M25-9

  懒人少语之第九周  1 ??SSL/TLS握手
  2
  3
  4 参考rfc5246
  5     HTTPS协议是 HTTP + SSL/TLS = HTTPS
  6     思路 : key{data+Sa[hash(data)]}+Pb(key)
  7     SSL/TLS握手过程可以分成两种类型:
  8         (1) SSL/TLS 双向认证,就是双方都会互相认证,也就是两者之间将会交换证书
  9         (2) SSL/TLS 单向认证,客户端会认证服务器端身份,而服务器端不会去对客户端身份进行验证
 10
 11     +------------------------^--------------------------+
 12     |  Client                | Server                   |
 13     +---------------------------------------------------+
 14     |  1 Client Hello        |                          |
 15     +---------------------------------------------------+
 16     |                        | 2 Server Hello           |
 17     |                        | 3 certificate            |
 18     |                        | 4 (server_key_exchange)  |
 19     |                        | 5 (certificate_request)! |
 20     |                        | 6 server_hello_done      |
 21     +---------------------------------------------------+
 22     | 7 (certificate)!       |                          |
 23     | 8 client_key_exchange  |                          |
 24     | 9 (certificate_verify)!|                          |
 25     | 10 change_cipher_spec  |                          |
 26     |  ----finished----      |                          |
 27     +---------------------------------------------------+
 28     |                        | 11 change_cipher_spec    |
 29     |                        | ----finished----         |
 30     +---------------------------------------------------+
 31     |  Application Data      | Application Data         |
 32     |            <----------------------->              |
 33     |                        |                          |
 34     +------------------------v--------------------------+
 35
 36         括号的步骤是可选的()
 37         如果是单向认证,那么带!感叹号部分是不需要的()
 38         步骤四server_key_exchange只有在选择了某些密钥交换算法例如DH算法的时候才需要()
 39     1.Client Hello发送客户端的连接参数
 40
 41     2.Server Hello选中的客户端连接参数并发送服务端连接参数
 42     3.certificate发送服务端证书供客户端校验身份
 43     4.server_key_exchange发送由服务端提供的密钥生成参数(可无)
 44     5.certificate_request要求客户端提供证书信息
 45     6.server_hello_done声明服务端数据发送完毕
 46
 47     7.certificate客户端证书
 48     8.client_key_exchange发送客户端提供的密钥参数(预主密钥等)
 49     9.certifiate_verify发送客户端证书和当前所有握手消息签名信息结果
 50     10.change_cipher_spec客户端已生成密钥,后续通信需要加密
 51     --finished--发送往来消息签名/加密报文,确保未被篡改
 52
 53     11.change_cipher_spec服务端已生成密钥,后续通信需要加密
 54     --finished--发送往来消息签名/加密报文,确保未被篡改
 55
 56     Application Data应用数据`应用数据传输协议`
 57
 58         `1.2.6.8.10.11和finished都是信号交换协议`
 59         `10和11是密钥规格变更协议`
 60         `4.5.7.9是可选的握手/交换消息`
 61
 62 ??openssl命令
 63
 64     OpenSSL由三个功能组成:
 65         openssl: 多用途的命令行工具,包openssl
 66         libcrypto: 加密算法库,包openssl-libs;实现加密/解密的工具的库 #/etc/pki/tls/openssl.cnf
 67         libssl:加密模块应用库,实现了ssl及tls,包nss;利用ssl程序调用libssl库来完成ssl会话
 68
 69     OpenSSL的设计目的是提供一个保证网络通信安全的方法
 70     另一方面,OpenSSH提供了保护并加密通道的功能,通常用来建立从你的机器到外部服务器之间的Secure Shell(SSH)连接
 71     OpenSSH是指根据OpenSSH协议标准设计的命令行工具; OpenSSL提供了很大的一套密码工具
 72         参考 man openssl
 73
 74     ?OpenSSL:
 75         使用方法:
 76             openssl ?
 77                 Standard commands : 标准命令
 78                 Message Digest commands : 使用信息摘要的命令
 79                 Cipher commands : 主要用于加密解密档案的命令
 80
 81         ??加密: man enc
 82             openssl enc -des3 -a -salt -in /etc/fstab -out /tmp/fstab.cipher    (要注意后缀??.cipher)
 83             openssl enc -e -des -a -in message -out message.enc
 84                 enc     `对称加密,速度快,能大量处理数据`
 85                 -des3   `加密手段,使用des3来加密的`
 86                 -a      `当进行加解密时,它只对数据进行运算,会以base64的方式解码显示加密结果`
 87                 -salt   `为了和openssl 0.9.5之后的版本兼容,默认选项,会在加密后的密码前面放一段字符串,并使破解更困难`
 88                 -in     `指定输入文件`
 89                 -out    `指定输出保存文件`
 90
 91
 92         ??解密:
 93             openssl enc -d -des3 -salt -in /tmp/fstab.cipher -out /tmp/fstab
 94             openssl enc -d -des -a -in message.enc -out message.check -pass pass:PaSsWOrd
 95                 -d      `进行解密操作`
 96                 -pass   `可直接指定密钥来直接解密`
 97
 98         ??信息摘要码: man dgst
 99             用于实现在网络通信中保证所传输的数据完整性()
100             工具 : sha1sum; md5sum; openssl dgst
101                 openssl dgst command    https://wiki.openssl.org/index.php/Manual:Dgst(1)
102             常用用法 :
103                 openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile
104                 openssl dest -md5 /etc/fstab `获取fstab文件的md5特征码,默认16进制显示`
105                     echo ‘passwd‘ | openssl dgst -sha1
106                     openssl dgst -md5 file.txt
107
108         ??生成密码:
109             openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
110             -1 :            `使用md5加密算法`
111             -salt string :  `加入随机数,最多8位随机数`
112             -in file :      `对输入的文件内容进行加密`
113             -stdion :       `对标准输入的内容进行加密`
114                 openssl passwd
115                 openssl passwd -1
116                 openssl passwd -1 PaSsWOrd
117
118 ??其它
119
120     openssl passwd -1   `设置一组密码,查看MD5-based加密结果`
121
122     工具:
123         OpenSSL : gpg; openssl; reautl
124         信息摘要工具 : md5sum; sha1sum; sha224sum; sha256sum; sha384sum; sha512sum
125         OpenSSH : ssh-keygen; ssh-agent; ssh-add; ssh-keysign; ssh-keyscan; sftp-server; sshd
126
127 ??配置文件:(搭建CA的配置文件)
128     详细配置在自建文档里:/etc/pki/tls/openssl.cnf
129         部分:
130             ####################################################################
131             [ ca ]    ` CA相关配置段`
132             default_ca    = CA_default                # The default ca section            指定默认CA在[ CA_default ]配置
133
134             ####################################################################
135             [ CA_default ] ` CA默认的工作环境`
136
137             dir                = /etc/pki/CA            # Where everything is kept            默认工作目录,变量形式
138             certs            = $dir/certs            # Where the issued certs are kept    签发存放的证书路径<文件夹>(手动指定)
139             crl_dir            = $dir/crl                # Where the issued crl are kept        吊销证书列表存放路径<文件夹>
140             database        = $dir/index.txt        # database index file.                索引文件数据库,颁发/吊销过的证书索引文件<创建文件>
141             #unique_subject    = no                    # Set to ‘no‘ to allow creation of
142                                             # several ctificates with same subject.
143             new_certs_dir    = $dir/newcerts            # default place for new certs.        刚签署的新证书存放路径(自动指定)
144
145             certificate    = $dir/cacert.pem         # The CA certificate                    CA的自签证书
146             serial        = $dir/serial             # The current serial number                当前该证书的编号"序列号",第一次要指定编号
147             crlnumber    = $dir/crlnumber        # the current crl number                CRL吊销当前证书数量
148                                             # must be commented out to leave a V1 CRL
149             crl            = $dir/crl.pem                 # The current CRL                    当前使用的CRL
150             private_key    = $dir/private/cakey.pem    # The private key                    CA自身的私钥"安全权限为一般为600或400"
151             RANDFILE    = $dir/private/.rand        # private random number file        随机数证书
152                                                                                         `注:CRL是证书吊销列表 (Certificate Revocation List)`
153             x509_extensions    = usr_cert            # The extentions to add to the cert        用户的X509证书
154         略...
155
156     ?使用openssl工具创建CA证书和申请证书
157         ??CA是证书颁发机构
158
159         1. 创建CA提供所需的目录和文件
160             mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private,crlnumber}
161                 certs存放x509自签证书; private存放私钥文件; crl注销信息 ;
162                 newcerts自动指定的证书存放路径; crlnumber吊销证书列表
163             touch /etc/pki/CA/{serial,index.txt}
164                 serial序列号; index.txt数据库颁发数据
165
166         2. 指明证书的编号(第一次要指定)
167             echo 01 >> /etc/pki/CA/serial
168
169         3. 使用genrsa生成RSA私钥,私钥的文件名与存放位置要与配置文件中的设置相匹配
170             帮助openssl genrsa -h
171             cd /etc/pki/CA/
172             openssl genrsa -out ./private/key.pem 2048
173
174         4. 创建CA密钥
175             在子shell设定umask变量`权限控制`
176                 (umask 077; openssl genrsa -out private/cakey.pem 2048)
177             若需提取CA公钥
178                 openssl rsa -in private/cakey.pem -pubout -text
179                     若不需显示公钥信息
180                         openssl rsa -in private/cakey.pem -pubout -text -noout
181
182         5. 生成自签证书,自签证书的存放位置也要与配置文件中的设置相匹配,生成证书时需要填写相应的信息
183             使用req的命令
184             openssl req -h `命令帮助`
185             openssl req -new -x509 -key private/cakey.pem -out private/cacert.pem -days 365
186                 -new : 表示生成一个新证书签署请求
187                 -x509 : 专用于CA生成自签证书,如果不是自签证书则不需要此项
188                 -key : 生成请求时用到的私钥文件
189                 -out : 证书的保存路径
190                 -days : 证书的有效期限,单位是day(天),默认是365天
191                     Country Name (2 letter code) [XX]:CN
192                     State or Province Name (full name) []:Guangdong
193                     Locality Name (eg, city) [Default City]:Guangzhou
194                     Organization Name (eg, company) [Default Company Ltd]:Ltb
195                     Organizational Unit Name (eg, section) []:opt_Me
196                     Common Name (eg, your name or your server‘s hostname) []:tcpip.top
197                     Email Address []:[email protected]
198
199             若需证书签发请求,签发后证书格式应为.crt
200                 客户端:
201                     mkdir /etc/httpd/ssl
202                     cd /etc/httpd/ssl
203                     (umask 077; openssl genrsa -out httpd.key 1024)
204                 生成证书签署请求:
205                     openssl req -new -key httpd.key -out httpd.crt -days 365(你指定的时间无用可忽略)
206                 将证书发往CA:(模拟服务端)
207                     scp httpd.crt 172.18.150.0:/tmp/
208                 CA服务端签署证书:(完成 成功/错误)
209                     openssl ca in /tmp/httpd.crt -out /etc/pki/CA/certs/httpdca.crt -days 365
210                     y
211                     y
212                 签署后将证书传回客户端
213                     scp /etc/pki/CA/certs/httpdca.crt 172.18.252.0:/etc/pki/CA/certs/
214
215                     吊销证书:(ca服务端)
216                         openssl ca -revoke /etc/pki/CA/certs/httpdca.crt
217                     记录吊销证书的吊销编号(第一次吊销时执行)
218                         echo 01 > /etc/pki/CA/crlnumber
219                     更新证书吊销列表
220                         openssl ca -gencrl -out /etc/pki/CA/crl/httpdca.crl ???
221                     查看crl吊销文件命令
222                         openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
223                     查看吊销的证书是否已经吊销了
224                         openssl x509 -in /etc/pki/CA/httpca.crt -noout -serial -subject
时间: 2024-08-06 23:38:49

M25-9的相关文章

sdutoj Thrall’s Dream

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2604 Thrall’s Dream Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 We never paid any heed to the ancient prophecies, like fools we clung to the old hatreds, and fought

2014ACM/ICPC亚洲区广州站 北大出题

http://acm.hdu.edu.cn/showproblem.php?pid=5131 现场赛第一个题,水题.题意:给水浒英雄排序,按照杀人数大到小,相同按照名字字典序小到大.输出.然后对每个查询的名字,计数有多少人杀人数大于他,输出个数加1,计数有多少人杀人数相同,但名字小,如果没有不输出,否则输出个数加1. 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 using namespa

POJ2955BRACKETS(区间DP括号匹配)

%E7%94%A8UNITY5%E5%BC%80%E5%8F%91%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%89%8B%E6%9C%BA%E6%B8%B8%E6%88%8F%281%29%E5%90%84%E7%A7%8D%E6%8F%92%E4%BB%B6%E7%9A%84%E5%87%86%E5%A4%87 http://mp3.baidu.com/songlist/502238688?54R6m1&pgC5_8fA5=XF4 http://mp3.baidu.com/s

Windows Phone开发(20):当MediaElement和VideoBrush合作的时候

前面说的那么多控件都是"静态"的,都是"哑吧"的,今天,你有没有兴趣研究一下,既能"有声有色"又操作简单的控件吗?如果有,请随我来. MediaElement播放多媒体文件. 首先,隆重介绍一下MediaElement,为什么要隆重呢?因为它简单,真的,你一定会玩的,但是,MediaElement功能强大,它可以播放音频和视频,只要支持的格式就行了. 要设置播放的音频或视频文件,你只需要设置Source属性即可,它其实就是一个URI,如果要播放你

vue2购物车ch3-(过滤器使用 单件商品金额计算 全选全不选 总金额计算 删除商品功能)

1 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- Always force latest IE rendering engine or request Chrome Frame --> <meta content="IE=edge,chrome=1" http-equiv

vue2购物车ch1-(安装依赖、简单配置、 axios获取api的模拟数据)

0--项目说明 说明此项目源自某课网购物车教程,但是在开发过程中,发现在开发过程中用的还是 vue-resource(宣布不更新的类$.ajx()插件),为了以后的发展使用axios.js,详情参考 1 初始静态页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <!-- Always force latest IE renderin

并查集详解 (转)

http://blog.csdn.net/dellaserss/article/details/7724401 我从CSDN转的文章,原文作者我也不懂是谁,文章写得真的是诙谐幽默,使得内容更容易理解了. 来看一个实例,杭电OJ 1232畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可).问最少还需要建

[BZOJ1046] [HAOI2007] 上升序列 (dp)

Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ax2 < … < axm).那么就称P为S的一个上升序列.如果有多个P满足条件,那么我们想求字典序最小的那个.任务给出S序列,给出若干询问.对于第i个询问,求出长度为Li的上升序列,如有多个,求出字典序最小的那个(即首先x1最小,如果不唯一,再看x2最小……),如果不存在长度为Li的上升序列

率坷现谲诰uz6hf13j36

别看在史莱克学院武魂系的地位要远远高于魂导系,可论富有程度却是拍马难及.很多时候武魂系还要依靠魂导系拨款呢."人类果然是藏龙卧虎,那天我只是流露出一丝自己的气息竟然也会被察觉.真是危险.不过,这只是个最弱小的封号斗罗.真没想到,有一天这种修为的存在也敢在我面前耀武扬威.要是以前,我瞬间就让他永远成为冰雕."第一百三十六章 进海神阁是要门票的(中)巫风在心生恐惧的时候就已经有了准备,将魂力集中于脑部防御.但是.就在这一瞬,他只觉得一根灰色的钢针缓缓的刺到自己面前,她甚至能够清晰的感觉到那

hihocoder1062 最近公共祖先&#183;一

问题描述: 已知人名构成的父子关系树(或者森林),对于给定的两个人名name1和name2,求其最近公共祖先.题目保证人名不重复. 分析: 利用C++ STL中的map和set容器可以很方便的实现.用map容器存储父子关系.对于每一个询问,先将从name1开始到树根的路径上的所有人名放入一个set容器,然后从name2开始向树根上溯,逐个检测人名是否已在set中即可. 我的代码: 1 #include <iostream> 2 #include <string> 3 #includ