1、详细描述一次加密通讯的过程,结合图示最佳。
以Bob和Alice安全通讯为例:
Bob<--------->Alice
1. Bob要和Alice安全通信首先要取得对方的公钥,即对方的证书,并验证证书的合法性。验证过程和内容:
1)、用CA的公钥(双方已知)解密对方证书中CA的签名;能解密说明证书来原可靠;
2)、用证书中标记的“签名算法”来计算证书的相关信息,并将散列计算的结果与证书“发行者签名”解密的结果(证书特征码)进行比较,如果一致说明证书完整性可靠;
3)、检查证书的有效期限是否在合法范围内,防止证书过期;
4)、验证证书的“主体名称”和预通信的人是否对应;
5)、检查证书是否被吊销;
以上验证成功则说明对方证书可靠,并信任该证书。
2. 取得对方证书(即公钥)后进行如下操作:
加密:
1)、Bob对明文数据进行散列计算,提取出数据指纹(特征码,也叫信息摘要);
2)、Bob使用自己的私钥对该数据指纹进行加密,生成数字签名,并将该数字签名附加在明文数据之后;
3)、Bob使用一个一次性的对称加密算法密钥对明文和数字签名进行加密,生成密文;
4)、Bob再使用Alice的公钥对对称加密算法的密钥进行加密,生成数字信封;
5)、Bob将密文和数字信封打包发送给Alice;
解密:
1)、Alice收到数据(密文+数字信封)后,使用自己的私钥解密数字信封,得到对称加密算法的密钥;
2)、使用对称加密密钥解密密文,得到明文数据和数字签名。保证了数据的私密性;
3)、使用Bob的公钥解密数字签名,得到明文的数据指纹(特征码)。如果能解出,说明数据为Bob发送,保证了数据的不可否认性;
4)、Alice使用同样的散列算法对明文计算得出数据指纹(特征码),并与Bob计算的数据指纹进行比对,如果一致,说明数据没有被篡改。保证的数据的完整性;
2、描述创建私有CA的过程,以及为客户端发来的证书请求进行办法证书。
1.首先在CA服务器上创建所需要的文件在/etc/pki/CA中,新建两个文件
touch index.txt
echo 01 > serial
2.CA服务器自签证书
先生成私钥:(umask 077; openssl genrsa -out/etc/pki/CA/private/cakey.pem 2048)
再生成自签证书:openssl req -new -x509 -key/etc/pki/CA/private/cakey.pem -days 7300 -out cacert.pem
选项说明: new: 生成新证书签署请求;
-x509:专用于CA生成子签证书;
-key:生成请求时用到的私钥文件;
-out:/path/to/somecertfile:证书的保存路径;
3.请求证书的服务器生成证书请求
先生成私钥:(umask 077; openssl genrsa -out/etc/httpd/ssl/httpd.key 2048)
再生成证书请求: openssl req -new -key/etc/httpd/ssl/httpd.key -days 365 -out/etc/httpd/ssl/httpd.csr
###我这是做的https服务器,所以起名httpd.csr
4.把情求文件传输给CA
scp /etc/httpd/ssl/httpd.csr root@CAIPADRESS:/tmp/httpd.csr
5.CA签署证书并放证书发还给请求者;
#openssl ca -in /tmp/httpd.csr -out/etc/pki/CA/certs/httpd.crt -days 365
scp /tmp/httpd.csr root@HTTPIPADRESS:/etc/httpd/ssl/httpd.crt
3、搭建一套DNS服务器,负责解析magedu.com域名(自行设定主机名及IP)
(1)、能够对一些主机名进行正向解析和逆向解析;
(2)、对子域cdn.magedu.com进行子域授权,子域负责解析对应子域中的主机名;
(3)、为了保证DNS服务系统的高可用性,请设计一套方案,并写出详细的实施过程
]# yum install bind
~]# yum install bind-utils 用于dns测试使用
]# setenforce 0
~]# service iptables stop
]# vim /etc/named.conf
listen-on port 53 { any;}; 修改为any;表示监听所有地址的53端口
// listen-on-v6 port 53 { ::1; }; 注释掉了IPV6的监听功能
allow-query { any; }; 修改为any;表示允许所有主机进行dns查询
recursion yes; 默认yes不改动,表示是否允许递归
dnssec-enable no; 改为no;
dnssec-validation no; 改为no;
保存退出
service named start 启动服务
dig -t A www.souhu.com @192.168.1.111 dns查询测试。dns服务器IP为192.168.1.111
下边配置区域解析文件:
# vim /etc/named.rfc1912.zones
zone "magedu.com" IN {
type master;
file "magedu.com.zone";
allow-update { none;};表示不允许任何主机更新解析文件,安装考虑
};
保存退出
]# vim /var/named/magedu.com.zone
下边创建反向解析文件:
]# vim /etc/named.rfc1912.zones
zone "168.192.in-addr.arpa" IN {
type master;
file "192.168.zone";
};
]# vim 192.168.zone
下面进行子域授权;
首先在父域dns服务器上添加子域dns服务器的区域解析
添加一条子域dns的NS记录和A记录。我的子域dns服务器IP为192.168.1.110
然后子域节点安装bind程序包,配置主配置文件首先成为dns缓存服务器,配置和父域节点一样。
再在子域中添加区域解析文件
# vim /etc/named.rfc1912.zones
zone "cdn.magedu.com" IN {
type master;
file "cdn.magedu.com.zone";
allow-update { none; };
};
保存退出后启动dns服务,]#service named start
最后在子域节点上进行dns测试,能够解析自己的域,父域不能解析。
至此,完成子域授权操作。
下面介绍下高可用性,dns的服务器可以是一个主服务多个从服务器。每当主服务器发生解析文件变更时,会主动通知从节点,从而把变更后的解析库文件传递给从服务器。当有一台dns服务器不能提供服务时,可暂时由另外一台dns服务器提供服务。从而实现了高可用性。
Dns主节点的配置就是在/etc/named.rfc1912.zones文件中定义解析区域时,保证type master;即可。还有一点,主节点的区域解析文件中要有从节点的NS记录和A记录。
ns从节点的配置首先是定义区域
]# vim /etc/named.rfc1912.zones
zone "magedu.com" IN {区域名称必须和主节点一致
type slave;类型为从节点
masters { 192.168.1.111; }; 给定主节点的IP地址
file "slaves/magedu.com.zone";区域解析文件的保存位置在slaves文件夹下
};
还有一点就是要保证主从节点的时间同步,和保证主从节点的通信。
两边重启服务后,查看日志信息就能看到是否成功。
4、请描述一次完整的http请求处理过程;
一次完整的http请求的过程:
1 建立连接或处理连接;接收请求或拒绝请求
2接受请求 接受来自于网络的请求报文中对某资源的一次请求的过程;
3处理请求:对请求报文进行分析,并获取请求的资源及请求方法等相关信息元数据:请求报文首部
4访问资源;获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求这提供对方请求的静态资源,或动态生成后的资源;这些资源放置于本地文件系统某路径下,此路径通常称为docroot
5创建响应报文;
6发送响应报文
7记录日志
5、httpd所支持的处理模型有哪些,他们的分别使用于哪些环境。
prefork :多进程模型,每个进程响应一个请求; 一个主进程:负责生成n个子进程,子进程也称为工作进程,每个子进程处理一个用户请求,即便没有用户请求,也会预先生成多个空闲进程,随时等待请求到达;最大不会超过1024个;
worker:多线程模型,每个线程响应一个请求;一个主进程,生成多个子进程;每个子进程负责生成多个线程,每个线程响应一个请求 ;
event:事件驱动模型,每个线程响应n个请求;
6、建立httpd服务器(基于编译的方式进行),要求:
提供两个基于名称的虚拟主机:
(a)www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1.err,访问日志为/var/log/httpd/www1.access;
(b)www2.stuX.com,页面文件目录为/web/vhosts/www2;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/www2.access;
(c)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名;
(d)通过www1.stuX.com/server-status输出httpd工作状态相关信息,且只允许提供帐号密码才能访问(status:status);
# wget http://apache.fayea.com/httpd/httpd-2.4.23.tar.gz
]# wget http://apache.fayea.com/apr/apr-1.5.2.tar.gz
# wget http://apache.fayea.com/apr/apr-util-1.5.4.tar.gz
安装开发工具
]# yum -y groupinstall "Development tools" "Server Platform Development"
解决依赖关系
]# tar zxvf apr-1.5.2.tar.gz
# cd apr-1.5.2
]# ./configure --prefix=/usr/local/apr
# make && make install
# tar zxvf apr-util-1.5.4.tar.gz
]# cd apr-util-1.5.4
]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make && make install
]# yum install pcre-devel
添加用户和用户组
#groupadd -r apache
#useradd -r -g apache apache
编译安装http2.4
]# tar zvxf httpd-2.4.23.tar.gz
]# cd httpd-2.4.23
]#./configure --prefix=/usr/apache --sysconf=/etc/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite -with-zlib --with-pcre --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
]# make && make install
启动服务 # cd /usr/apache/bin; ./apachectl -k start
7、为第6题中的第2个虚拟主机提供https服务,使得用户可以通过https安全的访问此web站点;
(1)要求使用证书认证,证书中要求使用的国家(CN)、州(HA)、城市(ZZ)和组织(MageEdu);
(2)设置部门为Ops,主机名为www2.stuX.com,邮件为admin@stuX.com;
在CA服务器上子签证书;
1,首先/etc/pki/tls/openssl.conf配置文件创建serial和index.txt文件
2,生成CA的私钥文件:
# (umask 077; openssl genrsa -out private/cakey.pem 2048)
3,生成子签证书:
]# openssl req -x509 -new -key private/cakey.pem -days 7300 -out cacert.pem
在httpd服务器上获得证书
1,首先生成私钥
#(umask 077; openssl genrsa -out httpd.key 2048)
2,生成证书请求文件
openssl req -new -key httpd.key -days 365 -out httpd.csr
3.将请求文件发送给CA服务器
]# scp httpd.csr root@192.168.1.112:/tmp
4.CA服务器签发证书
]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
把证书传给htppd服务器即可。#scp httpd.crt root@192.168.1.111:/etc/httpd24/extra
现在就可以配置www2.satux.com的ssl功能了
vim /etc/httpd/conf.d/ssl.conf
在末尾添加以下内容
<VirtualHost 192.168.1.111:443>
DocumentRoot /web/vhosts/www2/
ServerName www2.stuX.com:443
SSLEngine on
SSLCertificateFile /etc/httpd24/extra/httpd.crt
SSLCertificateKeyFile /etc/httpd24/extra/httpd.key
</VirtualHost>
重启服务,即可。
8、建立samba共享,共享目录为/data,要求:(描述完整的过程)
1)共享名为shared,工作组为magedu;
2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;
3)添加samba用户gentoo,centos和ubuntu,密码均为“mageedu”;
4)此samba共享shared仅允许develop组具有写权限,其他用户只能以只读方式访问;
5)此samba共享服务仅允许来自于172.16.0.0/16网络的主机访问;
[root@ moban ~]#yum install samba -y #新增用户和组
[root@ moban ~]#groupadd develop
[root@ moban ~]# useradd -G develop gentoo
[root@ moban ~]# useradd -G develop centos
[root@ moban ~]# useradd ubuntu
[root@ moban ~]# echo "gentoo"| passwd --stdin gentoo #更改用户 gentoo 的密码
[root@ moban ~]# echo "centos"| passwd --stdin centos
[root@ moban ~]# echo "ubuntu"| passwd --stdin ubuntu
#增加samba用户,新增的samba用户必须是系统中已经存在的
[root@ moban ~]# smbpasswd -a gentoo
New SMB password:
Retype new SMB password:
Added user gentoo.
[root@nod1 ~]# smbpasswd -a centos
New SMB password:
Retype new SMB password:
Added user centos.
[root@nod1 ~]# smbpasswd -a ubuntu
New SMB password:
Retype new SMB password:
Added user ubuntu.
#编辑配置文件
[root@ moban ~]# vim /etc/samba/smb.conf
[global]
workgroup = magedu
server string = Samba Server Version %v
security = user
passdb backend = tdbsam
load printers = yes
cups options = raw
hosts allow = 172.16.
[shared]
comment = my samba
path = /data
public = no
valid users = gentoo,centos,ubuntu,@develop
read list = ubuntu
write list = @develop
writable = yes
printable = no
#启动服务
[root@ moban ~]# service nmb start
[root@ moban ~]# service smb start
9、搭建一套文件vsftp文件共享服务,共享目录为/ftproot,要求:(描述完整的过程)
1)基于虚拟用户的访问形式;
2)匿名用户只允许下载,不允许上传;
3)禁锢所有的用户于其家目录当中;
4)限制最大并发连接数为200:;
5)匿名用户的最大传输速率512KB/s
6)虚拟用户的账号存储在mysql数据库当中。
7)数据库通过NFS进行共享。
代码语言
# yum -y install mysql-server mysql-devel pam_mysql
创建vsftpd数据库和虚拟用户账号
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to centos@localhost identified by ‘centos‘;
mysql> grant select on vsftpd.* to centos@127.0.0.1 identified by ‘centos‘;
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (
id int AUTO_INCREMENT NOT NULL,
name char(20) binary NOT NULL,
password char(48) binary NOT NULL,
primary key(id)
);
配置vsftpd
先建立pam认证所需文件
#vi /etc/pam.d/vsftpd.mysql
添加如下两行
auth required /lib/security/pam_mysql.so user=centos passwd=centos host=localhost db=vsftpd table=users usercolumn=centos passwdcolumn=centos crypt=2
account required /lib/security/pam_mysql.so user=centos passwd=centos host=localhost db=vsftpd table=users usercolumn=gentoo passwdcolumn=gentoo crypt=2
建立虚拟用户映射的系统用户及对应的目录
# useradd -s /sbin/nologin -d /var/ftproot vuser
# chmod go+rx /var/ftproot
修改vsftpd的配置文件,使其适应mysql认证
anonymous_enable=UES
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES 将用户禁锢在自己的家目录中
guest_enable=YES
guest_username=vuser 指明虚拟用户映射到的系统用户
listen=YES
pasv_min_port=30000
pasv_max_port=30999
pam_service_name=vsftpd.mysql 指明使用/etc/pam.d/vsftpd.mysql 来认证