马哥教育网络19期+第十一周课程练习

1、详细描述一次加密通讯的过程,结合图示最佳。

SSL协议基础:
    SSL协议位于TCP/IP协议与各种应用层协议之间,本身又分为两层:
    (1)、SSL记录协议:建立在可靠传输层协议(TCP)之上,为上层协议提供数据封装、压缩、加密等基本功能。
    (2)、SSL握手协议:在SSL记录协议之上,用于实际数据传输前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
SSL协议通信过程:
    (1)、浏览器发送一个连接请求给服务器;服务器将自己的证书(包含服务器公钥S_PuKey)、对称加密算法种类及其他相关信息返回客户端;
    (2)、客户端浏览器检查服务器传送到CA证书是否由自己信赖的CA中心签发。若是,执行4步;否则,给客户一个警告信息:询问是否继续访问。
    (3)、客户端浏览器比较证书里的信息,如证书有效期、服务器域名和公钥S_PK,与服务器传回的信息是否一致,如果一致,则浏览器完成对服务器的身份认证。
    (4)、服务器要求客户端发送客户端证书(包含客户端公钥C_PuKey)、支持的对称加密方案及其他相关信息。收到后,服务器进行相同的身份认证,若没有通过验证,则拒绝连接;
    (5)、服务器根据客户端浏览器发送到密码种类,选择一种加密程度最高的方案,用客户端公钥C_PuKey加密后通知到浏览器;
    (6)、客户端通过私钥C_PrKey解密后,得知服务器选择的加密方案,并选择一个通话密钥key,接着用服务器公钥S_PuKey加密后发送给服务器;
    (7)、服务器接收到的浏览器传送到消息,用私钥S_PrKey解密,获得通话密钥key。
    (8)、接下来的数据传输都使用该对称密钥key进行加密。
    上面所述的是双向认证SSL协议的具体通讯过程,服务器和用户双方必须都有证书。由此可见,SSL协议是通过非对称密钥机制保证双方身份认证,并完成建立连接,在实际数据通信
时通过对称密钥机制保障数据安全性。

2、描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书。

1. 颁发证书
1.1 修改CA的一些配置文件
CA要给别人颁发证书,首先自己得有一个作为根证书,我们得在一切工作之前修改好CA的配置文件、序列号、索引等等。
# vi /etc/pki/tls/openssl.cnf:
...
[ CA_default ]

dir             = /etc/pki/CA           # Where everything is keptcerts           = $dir/certs            # Where the issued certs are keptcrl_dir         = $dir/crl              # Where the issued crl are keptdatabase        = $dir/index.txt        # database index file.#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.new_certs_dir   = $dir/newcerts         # default place for new certs.certificate     = $dir/cacert.pem       # The CA certificateserial          = $dir/serial           # The current serial numbercrlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRLcrl             = $dir/crl.pem          # The current CRLprivate_key     = $dir/private/cakey.pem # The private keyRANDFILE        = $dir/private/.rand    # private random number file...
default_days    = 3650                  # how long to certify for...# For the CA policy[ policy_match ]
countryName             = match
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional
...
[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = CN
countryName_min                 = 2countryName_max                 = 2stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = GD
...
[ req_distinguished_name ] 部分主要是颁证时一些默认的值,可以不动
一定要注意[ policy_match ]中的设定的匹配规则,是有可能因为证书使用的工具不一样,导致即使设置了csr中看起来有相同的countryName,stateOrProvinceName等,但在最终生成证书时依然报错:
Using configuration from /usr/lib/ssl/openssl.cnfCheck that the request matches the signature
Signature ok
The stateOrProvinceName field needed to be the same in the
CA certificate (GuangDong) and the request (GuangDong)
touch index.txt serial:
在CA目录下创建两个初始文件:
# touch index.txt serial# echo 01 > serial
1.2 生成根密钥
# cd /etc/pki/CA/# openssl genrsa -out private/cakey.pem 2048
为了安全起见,修改cakey.pem私钥文件权限为600或400,也可以使用子shell生成( umask 077; openssl genrsa -out private/cakey.pem 2048 ),下面不再重复。
1.3 生成根证书
使用req命令生成自签证书:
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
会提示输入一些内容,因为是私有的,所以可以随便输入(之前修改的openssl.cnf会在这里呈现),最好记住能与后面保持一致。上面的自签证书cacert.pem应该生成在/etc/pki/CA下。
1.4 为我们的nginx web服务器生成ssl密钥
以上都是在CA服务器上做的操作,而且只需进行一次,现在转到nginx服务器上执行:
# cd /etc/nginx/ssl# openssl genrsa -out nginx.key 2048
这里测试的时候CA中心与要申请证书的服务器是同一个。
1.5 为nginx生成证书签署请求
# openssl req -new -key nginx.key -out nginx.csr...Country Name (2 letter code) [AU]:CNState or Province Name (full name) [Some-State]:GDLocality Name (eg, city) []:SZOrganization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANYOrganizational Unit Name (eg, section) []:IT_SECTIONCommon Name (e.g. server FQDN or YOUR name) []:your.domain.comEmail Address []:Please enter the following 'extra' attributes
to be sent with your certificate requestA challenge password []:An optional company name []:...
同样会提示输入一些内容,其它随便,除了Commone Name一定要是你要授予证书的服务器域名或主机名,challenge password不填。
1.6 私有CA根据请求来签署证书
接下来要把上一步生成的证书请求csr文件,发到CA服务器上,在CA上执行:
# openssl ca -in nginx.csr -out nginx.crt另外在极少数情况下,上面的命令生成的证书不能识别,试试下面的命令:# openssl x509 -req -in server.csr -CA /etc/pki/CA/cacert.pem -CAkey /etc/pki/CA/private/cakey.pem -CAcreateserial -out server.crt
上面签发过程其实默认使用了-cert cacert.pem -keyfile cakey.pem,这两个文件就是前两步生成的位于/etc/pki/CA下的根密钥和根证书。将生成的crt证书发回nginx服务器使用。
到此我们已经拥有了建立ssl安全连接所需要的所有文件,并且服务器的crt和key都位于配置的目录下,剩下就是将证书添加到受信任的根证书颁发机构。

3、描述DNS查询过程以及DNS服务器类别。

过程:
  1)浏览器缓存
    当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);
  2)系统缓存
    当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;
  3)路由器缓存
  当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;
  4)ISP(互联网服务提供商)DNS缓存
  当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;
  5)根域名服务器
  当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内
  顶级域名(如.com)服务器IP告诉本地DNS服务器;
  6)顶级域名服务器
  顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;
  7)二级域名服务器
  主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;
  8)保存结果至缓存
  本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接。
    DNS服务器类别:
 (1)主域名服务器:负责维护这个区域的所有域名信息,是特定的所有信息的权威信息源。也就是说,主域名服务器内所存储的是该区域的正本数据,系统管理员可以对它进行修改。
 (2)辅助域名服务器:当主域名服务器出现故障、关闭或负载过重时,辅助域名服务器作为备份服务提供域名解析服务。辅助域名服务器中的区域文件内的数据是从另外一台域名服务器
    复制过来的,并不是直接输入的,也就是说这个区域文件只是一份副本,这里的数据是无法修改的。
 (3)缓存域名服务器:可运行域名服务器软件但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的回答,一旦获取一个答案,就将它放在高速缓存中,以后查询相同的信
    息时就用它予以回答。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。
 (4)转发域名服务器:负责所有非本地域名的本地查询。转发域名服务器接到查询请求时,在其缓存中查找,如找不到就把请求依次转发到指定的域名服务器,直到查询到结果为止,否
    则返回无法映射的结果。

4、搭建一套DNS服务器,负责解析magedu.com域名(自行设定主机名及IP)

  (1)、能够对一些主机名进行正向解析和逆向解析;

  (2)、对子域cdn.magedu.com进行子域授权,子域负责解析对应子域中的主机名;

  (3)、为了保证DNS服务系统的高可用性,请设计一套方案,并写出详细的实施过程

# yum -y install bind*
常用的配置文件有:
/etc/named.conf(DNS的配置文件)
/etc/named.rfc1912.zones(DNS的区域配置)
/etc/rc.d/init.d/named(服务脚本)
/var/named(存放区域数据文件)

# vim /etc/named.conf

1.png

其中“listen-on port 53 { 127.0.0.1; 192.168.0.130; };”表示监听本地IP的53号端口;
“allow-query     { any; };”表示允许查询;
recursion yes; 是否递归 如果是no 那么这台DNS服务器讲不会解析 yes或注释掉不写,默认是允许;
配置文件中还有“include "/etc/named.rfc1912.zones";”,这个是区域配置文件。

一、正向和反向区域解析

# vim /etc/named.rfc1912.zones

在配置文件的最后添加如下两行配置,分别是正向和反向的配置。

zone "magedu.com" IN {
        type master;
        file "magedu.com.zone";
        allow-transter { 192.168.0.131; };
};

zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "0.168.192.zone";
        allow-transter { 192.168.0.131; };
};

allow-transter { 192.168.0.131; };表示只允许0.131这个主机同步数据,也就是做他的辅DNS,多个IP用“;”隔开即可

然后编辑正向的zone文件

# vim /var/named/magedu.com.zone

$TTL 1D
$ORIGIN magedu.com.
@       IN      SOA     ns.magedu.com.          admin.magedu.com.(
                        2016080801
                        2H
                        5M
                        7D
                        12H )
        IN      NS      ns
        IN      NS      ns2            //辅助DNS使用
        IN      MX  10  mx1
ns2     IN      A       192.168.0.131  //辅助DNS使用
ns      IN      A       192.168.0.130
mx1     IN      A       192.168.0.130
www     IN      A       192.168.0.130

反向zone文件如下:

$TTL 86400
$ORIGIN 0.168.192.in-addr.arpa.
@	IN	SOA		ns.magedu.com.	admin.magedu.com. (
				2016080801
				1H	
				5M
				7D
				1D )
	IN	NS		ns.magedu.com.
@       IN      NS              ns2.magedu.com.    //辅助DNS使用
131	IN	PTR		ns2.magedu.com.    //辅助DNS使用
130	IN	PTR		ns.magedu.com.
130	IN	PTR		www.magedu.com.
130	IN	PTR		mx1.magedu.com.

配置完成后,使用命令:named-checkzone检查语法错误,然后reload服务看到如下结果,说明解析正常

[root@Hao named]# dig -t www.magedu.com@192.168.0.130
;; Warning, ignoring invalid type www.magedu.com@192.168.0.130

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> -t www.magedu.com@192.168.0.130
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35832
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;.				IN	NS

;; ANSWER SECTION:
.			316950	IN	NS	b.root-servers.net.
.			316950	IN	NS	m.root-servers.net.
.			316950	IN	NS	i.root-servers.net.
.			316950	IN	NS	e.root-servers.net.
.			316950	IN	NS	f.root-servers.net.
.			316950	IN	NS	d.root-servers.net.
.			316950	IN	NS	c.root-servers.net.
.			316950	IN	NS	g.root-servers.net.
.			316950	IN	NS	a.root-servers.net.
.			316950	IN	NS	k.root-servers.net.
.			316950	IN	NS	h.root-servers.net.
.			316950	IN	NS	l.root-servers.net.
.			316950	IN	NS	j.root-servers.net.

;; Query time: 3 msec
;; SERVER: 202.106.46.151#53(202.106.46.151)
;; WHEN: Mon Aug  8 12:49:26 2016
;; MSG SIZE  rcvd: 228

  反向的解析可以使用dig -x 192.168.0.130(我的解析的IP,到时候你们可以填自己的IP)进行测试

二、配置主从同步达到高可用效果

  分别在正向解析库和反向解析库文件中添加辅助DNS服务器的信息,上述文件中已经标记出来了。

  辅DNS只需要创建区域文件,不需要创建区域数据文件,它的数据文件会从主服务器哪里同步过来。同步的数据在/var/named/slaves/目录中

        编辑辅DNS服务器上的/etc/named.rfc1912.zones文件,最后面添加如下内容:

zone "magedu.com" IN {
        type slave;
        masters { 192.168.0.130; };
        file "slave/magedu.com.zone";
        allow-transter { none; };
};

zone "0.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.0.130; };
        file "slave0.168.192.zone";
                allow-transter { none; };
};

该内容的意思是指定type类型为slave(辅助)类型,并指定主服务器“master { 192.168.0.130; };”;allow-transter { none; };表示该从服务器

不允许其他主机再同步DNS的数据。

然后named-checkconf检查语法错误,然后# service named start即可

三、子域授权

  新增一台IP为192.168.0.132的服务器为子域的主DNS(前面的父域的IP为0.130,父域的从是0.131)

  在父域的区域文件中添加NS和A记录

test.magedu.com.    IN    NS    ns.test.magedu.com.
ns.test.magedu.com. IN    A     192.168.0.132

    现在开始配置子域的DNS,# vim /etc/named.rfc1912.zones

zone "test.magedu.com" IN {
	type master;
	file "test.magedu.com.zone";
};

###下面这个部分是做转发的,不做转发的话,子域是不能解析父域里的主机的###
zone "magedu.com" IN {
	type forward;
	forward only;
	forwarders { 192.168.0.130; };
};

  在子域的服务器上# vim /var/named/test.magedu.com.zone

$TTL 86400
@       IN      SOA     ns.test.magedu.com.          admin.test.magedu.com.(
                        2016080801
                        2H
                        5M
                        7D
                        12H )
        IN      NS      ns.test.magedu.com.
        IN      MX  10  mx1.test.magedu.com.
ns.test.magedu.com.      IN      A       192.168.0.132
mx1.test.magedu.com.     IN      A       192.168.0.132
www     IN      A       192.168.0.132

检查语法,然后reload服务即可

原创文章,作者:Net19_口香糖,如若转载,请注明出处:http://www.178linux.com/23930

(0)
Net19_口香糖Net19_口香糖
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • RPM和YUM的使用说明

    一、RPM包管理程序 centos系统上使用rpm命令管理程序包: 安装、卸载、升级、查询、校验、数据库维护 RPM包安装选项:   –test:测试安装,但不真正执行安装   –nodeps:忽略依赖关系   –nosignature:不检查来源合法性   –nodig…

    Linux干货 2016-08-24
  • 马哥linux0803作业内容

    1. 创建sysadmins组 将用户user1,user2,user3加入sysadmins组中 将user3设置为sysadmins的管理员 用user3登录,将user2从组中移除 设置sysadmins的密码centos 设置user1 在创建新文件时,文件的所属组为sysadmins 删除user1…3 删除sysadmins 2、三种权限rwx对…

    Linux干货 2016-08-08
  • keepalived——高可用集群

    HA Cluster 集群类型:LB、HA、HP 系统可用性的公式:A=MTBF/(MTBF+MTTR) (0,1) 几个9: 99%, …, 99.999%     建议使用3个9的系统可用性 如何降低MTTR:冗余(redundant) active/passive active –>…

    Linux干货 2016-11-01
  • 文本处理课后小练习

    1、找出ifconfig命令结果中本机的所有IPv4地址 [root@wzc date]# ifconfig |grep -E -o  '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]…

    Linux干货 2016-08-08
  • shell脚本语言的for循环使用方法和案例

    在shell语言中bash是用的最多的,其语法简单。以指令为核心快速解决常用的问题。所有语言中逻辑控制是必不可少的,它可以帮助我们减少不必要的重复性工作。今天我们就来说说所有语言都会使用的神奇的for循环,学了它以后不仅知道如果规避重复的工作,还能理解程序的运行原理。         for循环是什么?&nb…

    Linux干货 2017-04-16
  • rsyslog学习

    一、rsyslog日志服务简介 二、rsyslog的配置详解 三、实现日志服务器收集日志及last、lastb、dmseg命令的使用 四、实现日志存储在mysql中 一、rsyslog日志服务简介 日志的概念好理解,日志作用可用于排障和追溯审计的等 1、rsyslog是一个C/S架构的服务,可监听于某套接字,帮其它主机记录日志信息,在linux系统中可以分类…

    Linux干货 2016-10-24

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-17 13:54

    写的很好,排版还可以在漂亮一点,加油,有的文字看不到了?下次在调整一下