Q:
1、画出TLS链路的通信图
2、如何让浏览器识别自签的证书
3、搭建DNS服务器
4、熟悉DNSPOD的解析类型
A:
1、TLS链路的通信图
- 谈判阶段:
- 客户端发送ClientHello消息,指定它支持的最高TLS协议版本,随机数,建议的密码套件列表和建议的压缩方法。如果客户端尝试执行恢复的握手,则它可以发送会话ID。如果客户端可以使用应用层协议协商,则它可能包括支持的应用协议列表,例如HTTP / 2。
- 服务器使用ServerHello消息进行响应,该消息包含所选协议版本,随机数,CipherSuite和客户端提供的选项中的压缩方法。为了确认或允许恢复握手,服务器可以发送会话ID。所选协议版本应该是客户端和服务器都支持的最高版本。例如,如果客户端支持TLS 1.1版并且服务器支持1.2版,则应选择版本1.1; 不应选择版本1.2。
- 服务器发送其证书消息(取决于所选的密码套件,服务器可以省略)。
- 服务器发送其ServerKeyExchange消息(取决于所选的密码套件,服务器可能会省略)。此消息将发送给所有DHE和DH_anon密码套件。
- 服务器发送ServerHelloDone消息,指示它已完成握手协商。
- 客户端回应一个ClientKeyExchange消息,其中可能包含一个PreMasterSecret,公钥,或没有。(同样,这取决于所选的密码。)此PreMasterSecret使用服务器证书的公钥进行加密。
- 然后,客户端和服务器使用随机数和PreMasterSecret来计算公共秘密,称为“主密钥”。此连接的所有其他关键数据都是从此主密钥(以及客户端和服务器生成的随机值)派生的,该密钥通过精心设计的伪随机函数传递。
- 客户端现在发送一个ChangeCipherSpec记录,基本上告诉服务器,“从现在开始我告诉你的所有东西都将被验证(如果加密参数存在于服务器证书中,则加密)。” ChangeCipherSpec本身是一个内容类型为20的记录级协议。
- 最后,客户端发送经过身份验证和加密的Finished消息,其中包含先前握手消息上的散列和MAC。
- 服务器将尝试解密客户端的Finished消息并验证散列和MAC。如果解密或验证失败,则认为握手失败并且连接应该被拆除。
- 最后,服务器发送一个ChangeCipherSpec,告诉客户端,“从现在开始我告诉你的所有内容都将被验证(如果加密是经过协商的,则加密)。”
- 服务器发送其经过身份验证和加密的Finished消息。
- 客户端执行与服务器在上一步骤中执行的相同的解密和验证过程。
- 应用程序阶段:此时,“握手”已完成,应用程序协议已启用,内容类型为23.客户端和服务器之间交换的应用程序消息也将进行身份验证,并且可选地加密,与其完成消息完全相同。否则,内容类型将返回25,客户端将不会进行身份验证。
https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_handshake
2、如何让浏览器识别自签的证书
建立私有CA:
- 生成私钥;
~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096) - 生成自签证书;
~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
-new:生成新证书签署请求;
-x509:生成自签格式证书,专用于创建私有CA时;
-key:生成请求时用到的私有文件路径;
-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
-days:证书的有效时长,单位是day; -
为CA提供所需的目录及文件;
~]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
~]# touch /etc/pki/CA/{serial,index.txt}
~]# echo 01 > /etc/pki/CA/serial
将cacert.pem导入到浏览器
任何此私有CA所签发的证书都可被浏览器识别
3、搭建DNS服务器
[root@localhost ~]# vim /etc/named.conf
[root@localhost ~]# vim /etc/named.rfc1912.zones
[root@localhost ~]# vim /var/named/superb.com.zone
[root@localhost ~]# tail -4 /etc/named.rfc1912.zones
zone "superb.com" IN {
type master;
file "superb.com.zone";
};
[root@localhost ~]# cat /var/named/superb.com.zone
@ IN SOA superb.com. dnsadmin.superb.com. (
2019032801
1H
10M
1W
1D
)
IN NS ns1
ns1 IN A 192.168.223.131
[root@localhost ~]# chgrp named /var/named/superb.com.zone
[root@localhost ~]# chmod o= /var/named/superb.com.zone
[root@localhost ~]# ll /var/named/superb.com.zone
-rw-r-----. 1 root named 143 Mar 28 04:51 /var/named/superb.com.zone
[root@localhost ~]# named-checkzone superb.com /var/named/superb.com.zone
/var/named/superb.com.zone:1: no TTL specified; using SOA MINTTL instead
zone superb.com/IN: loaded serial 2019032801
OK
[root@localhost ~]# named-checkconf
[root@localhost ~]# rndc reload
server reload successful
[root@localhost ~]# dig -t axfr superb.com @192.168.223.131
; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> -t axfr superb.com @192.168.223.131
;; global options: +cmd
superb.com. 86400 IN SOA superb.com. dnsadmin.superb.com. 2019032801 3600 600 604800 86400
superb.com. 86400 IN NS ns1.superb.com.
ns1.superb.com. 86400 IN A 192.168.223.131
superb.com. 86400 IN SOA superb.com. dnsadmin.superb.com. 2019032801 3600 600 604800 86400
;; Query time: 0 msec
;; SERVER: 192.168.223.131#53(192.168.223.131)
;; WHEN: Thu Mar 28 05:13:58 EDT 2019
;; XFR size: 4 records (messages 1, bytes 143)
4、熟悉DNSPOD的解析类型
资源记录:Resource Record, 简称rr;
记录有类型:A, AAAA, PTR, SOA, NS, CNAME, MX
├── SOA:Start Of Authority,起始授权记录; 一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
├── NS:Name Service,域名服务记录;一个区域解析库可以有多个NS记录;其中一个为主的;
├── A: Address, 地址记录,FQDN --> IPv4;
├── AAAA:地址记录, FQDN --> IPv6;
├── CNAME:Canonical Name,别名记录;
├── PTR:Pointer,IP --> FQDN
└── MX:Mail eXchanger,邮件交换器;
优先级:0-99,数字越小优先级越高;