HTTPS+CA+ssl/tls
https的加密流程
客服端
1、clienthello:支持哪些版本、支持哪些加密算法,随机生成一组32字节数据random_c
3、clientkeyexchange:公钥加密数据pre_master
服务器
2、serverhello:确定版本、确定加密算法,随机生成一组32个字节得数据random_s
servercertificate:证书、公钥
4、data:服务端收到pre_master—私钥进行解密
最后得会话密钥:random_c+random_s+pre_master
openssl: 命令的选项
-x509 :生成自签名证书格式,专用于创建私有CA
-new :生成新证书的签署请求
-key :生成请求时用到的私钥文件路径
-out :生成后的文件存放路径,如果是自签名操作,将直接生成签署过的证书
-days :证书有效期 默认是365天
在DNS服务器上添加内容
vim /var/named/cy.com(正向解析中添加)
admins IN A 172.16.30.3
如果没有部署DNS服务器的,就把主机的/etc/hosts记录修改一下
设置时钟同步
第一台
[root@web ]# yum -y install chrony
[root@web ]# systemctl restart chronyd
[root@web ]# systemctl enable chronyd
[root@web ]# hwclock -w
第二台
[root@admins ]# yum -y install chrony
[root@admins ]# systemctl restart chronyd
[root@admins ]# systemctl enable chronyd
[root@admins ]# hwclock -w
搭建CA
(1)创建文件和目录
//配置文件的位置
[root@admins tls]# vim /etc/pki/tls/openssl.cnf
[ CA_default ]
dir = /etc/pki/CA //CA的工作目录
certs = $dir/certs //证书位置
crl_dir = $dir/crl //crl的工作目录
database = $dir/index.txt //数据库的文件位置
new_certs_dir = $dir/newcerts
certificate = $dir/cacert.pem //证书位置
serial = $dir/serial //序列号位置
crlnumber = $dir/crlnumber
crl = $dir/crl.pem
private_key = $dir/private/cakey.pem //存放私钥的位置
$调用变量
// 在 /etc/pki/CA 下创建CA、 certs、 crl、newcerts、private目录和index.txt、serial 文件
[root@admins pki]# mkdir CA
[root@admins CA]# mkdir certs
[root@admins CA]# mkdir crl
[root@admins CA]# touch index.txt
[root@admins CA]# mkdir newcerts
[root@admins CA]# touch serial
[root@admins CA]# mkdir private //存放私钥二级目录
[root@admins CA]# ls
certs crl index.txt newcerts private serial
(2)生成私钥
// 生成私钥、并设置私钥的权限为700
[root@admins CA]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem)
(3)生成自签名的证书
[root@admins CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
Country Name (2 letter code) [XX]:CN //国家名称
State or Province Name (full name) []:HUBEI //省份名称
Locality Name (eg, city) [Default City]:WUHANG //地区或者城市名称
Organization Name (eg, company) [Default Company Ltd]:HYZY //组织名称
Organizational Unit Name (eg, section) []:SRE //组织单元名称
Common Name (eg, your name or your server's hostname) []: AAA //通用名称(服务器、自己的名字、完全合格域名、、、)
Email Address []:root.example.com //邮箱
[root@admins CA]# echo 01 > serial //定义一个序列号
(4)web服务器的证书(签名之后的证书)
1、生成私钥和证书
在/etc/httpd/下创建ssl目录,如果有不需要创建
[root@web ]# cd /etc/httpd/
[root@web httpd]# mkdir ssl
//生成私钥
[root@web ssl]# (umask 077;openssl genrsa -out /etc/httpd/ssl/httpd.key)
//生成证书
[root@web ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365
Country Name (2 letter code) [XX]:CN //和全面保持一致
State or Province Name (full name) []:HUBEI //和全面保持一致
Locality Name (eg, city) [Default City]:WUHANG //和全面保持一致
Organization Name (eg, company) [Default Company Ltd]:HYZY //和全面保持一致
Organizational Unit Name (eg, section) []:SRE //和全面保持一致
Common Name (eg, your name or your server's hostname) []:web.example.com //web 服务器的名字
Email Address []:root.example.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: //回车
An optional company name []: //回车
2、发送到admins服务器中进行签名
[root@admins CA]# vim /etc/NetworkManager/system-connections/ens160.nmconnection
[ethernet]
[ipv4]
address1=192.168.100.20/24,192.168.100.254
dns=192.168.100.10; //改为服务器的IP地址
method=manual
[root@admins CA]# systemctl restart NetworkManager
[root@admins CA]# nmcli connection up ens160
//将证书传输过去
[root@web ssl]# scp httpd.csr root@192.168.100.20:/etc/pki/CA/
//给证书签名
[root@admins CA]# openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
//下载签名证书
[root@web ssl]# scp root@192.168.100.20:/etc/pki/CA/certs/httpd.crt .
3、搭建https网站
安装软件包:
[root@web ssl]# yum -y install mod_ssl
[root@web ssl]# yum -y install httpd
修改配置文件
[root@web ssl]# vim /etc/httpd/conf.d/ssl.conf
Listen 443 https
SSLCertificateFile /etc/httpd/ssl/httpd.crt //证书位置
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key //私钥位置
4、搭建https网页
// 虚拟主机位置
[root@web ~]# cd /etc/httpd/
[root@web httpd]# ls
conf conf.d conf.modules.d logs modules run state
[root@web httpd]#
// 虚拟主机配置模板
[root@web conf.d]# find / -name "*httpd*host*"
/usr/share/doc/httpd-core/httpd-vhosts.conf
网络页设置
<VirtualHost 192.168.100.10:443>
DocumentRoot "/var/www/html"
ServerName web.example.com
SSLEngine on
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
</VirtualHost>
[root@web conf.d]# systemctl restart httpd
[root@web conf.d]# systemctl enable httpd
制作网页
[root@web html]# pwd
/var/www/html
[root@web html]# cat index.html
welcome to wuhang
5、客服端设置(可以用centOS7系统)
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
打开centOS7 配置IP设置DNS为服务器的ip
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.30
PREFIX=24
GATEWAY=192.168.100.254
DNS1=192.168.100.10
IPV6_PRIVACY=no
[root@localhost network-scripts]# systemctl restart network
下载证书
[root@localhost ~]# scp root@192.168.100.20:/etcpki/CA/cacert.pem .
在火狐浏览器----->选择设置(Preferences)----->选择安全与隐(Privacy$Security)
----->选择证书(Certificates)----->选择查看证书(View certificate)
----->选择证书(Authorities)----->选择导入(import)----->选择下载的证书
结果