M25-9

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于M25-9的主要内容,如果未能解决你的问题,请参考以下文章

代码片段

这些 C++ 代码片段有啥作用?

PHP 代码片段

关于代码片段的时间复杂度

代码片段 - Golang 实现集合操作

discuz X3.1 源代码阅读,记录代码片段