标签:校验 机构 span done 令行 完成 设置 string dex
懒人少语之第九周
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 []:admin@admin.com
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
标签:校验 机构 span done 令行 完成 设置 string dex
原文地址:http://www.cnblogs.com/mount-q/p/7499219.html