共计 3265 个字符,预计需要花费 9 分钟才能阅读完成。
实现 https
环境
1. 三台主机分别为 A,B,C。
2.A 主机设置为 CA 和 DNS 服务器,ip 为 192.168.213.129
3.B 主机为 client,ip 为 192.168.213.253
4.C 主机为 httpd server,ip 为 192.168.213.128
5. 已经在三台主机上启动了 httpd 服务,并且可以正常访问自己的网页。
1. 在 A 主机上创建 CA 和 DNS 服务器
1)创建所需要的文件 | |
生成证书索引数据库文件:touch /etc/pki/CA/index.txt | |
系统会自动生成个 index.txt.attr 文件。用来决定是否使证书为唯一性,也就是是否可以重复申请证书。指定第一个颁发证书的序列号:echo 01 > /etc/pki/CA/serial | |
2)CA 自签证书 | |
生成私钥:cd /etc/pki/CA/ | |
openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048 | |
chmod 600 cakey.pem | |
生成自签名证书:openssl req -new -x509 –key /etc/pki/CA/private/cakey.pem -days 7300 -out /etc/pki/CA/cacert.pem | |
3)创建 DNS 服务器 | |
1》vim /etc/named.conf | |
options {listen-on port 53 {any ; }; | |
// listen-on-v6 port 53 {::1; }; | |
directory "/var/named"; | |
dump-file "/var/named/data/cache_dump.db"; | |
statistics-file "/var/named/data/named_stats.txt"; | |
memstatistics-file "/var/named/data/named_mem_stats.txt"; | |
allow-query {any ; }; | |
recursion yes; | |
dnssec-enable no; | |
dnssec-validation no; | |
dnssec-lookaside no;2》关闭防火墙和设置 selinux 为 permissive | |
iptables -F | |
setenforce 0 | |
3》创建解析 | |
1>vim /etc/named.rfc1912.zones | |
zone "ab.com" IN {type master; | |
file "ab.com.zone"; | |
}; | |
2>named-checkconf | |
3>cd /var/named/ | |
4>cp -a named.localhost ab.com.zone | |
5>vim ab.com.zone | |
$TTL D | |
@ IN SOA dns admin.ab.com. (3 ; serial | |
D ; refresh | |
H ; retry | |
W ; expire | |
H ) ; minimum | |
NS dns | |
dns A 192.168.213.128 | |
websrv A 192.168.213.128 | |
mail A 192.168.213.128 | |
www CNAME websrv | |
6>named-checkzone ab.com /var/named/ab.com.zone | |
7> 重新加载 | |
rndc reload | |
service named reload or systemctl reload named | |
不行的话清除服务缓存,再来一遍 | |
rndc flush | |
最有效的方式是重启服务(正常工作中尽量别这么用,怕影响其他的同步)service named restart or systemctl restart named | |
8>rndc status |
2. 在 C 主机
1)指向 DNS 服务器 | |
vim /etc/resolv.conf | |
nameserver 192.168.213.129 | |
测试: | |
dig -t A www.ab.com | |
2)向 CA 申请证书 | |
1》生成证书请求 | |
生成私钥:(umask 066; openssl genrsa -out /etc/pki/tls/private/http.key 2048) | |
生成证书申请文件:openssl req -new -key /etc/pki/tls/private/http.key -days 365 -out /etc/pki/tls/http.csr | |
2》将证书请求文件传输给 CA | |
scp /etc/pki/tls/http.csr root@192.168.213.129: |
3. 在 A 主机
1)CA 签署证书:openssl ca -in /tmp/http.csr –out /etc/pki/CA/certs/http.crt -days 365 | |
注意:默认国家,省,公司名称三项必须和 CA 一致,但可以修改 /etc/pki/tls/openssl.cnf | |
common name 要使用此主机在通信真实使用的名字 | |
2)CA 证书和 CA 签署的证书发送给 C 主机,然后在 C 主机上进行配置。scp /etc/pki/CA/certs/http.crt root@192.168.213.128: | |
scp /etc/pki/CA/private/cakey.pem root@192.168.213.128: |
4. 在 C 主机
1)od_ssl 模块 | |
yum -y install mod_ssl | |
2)d_ssl 进行配置,配置文集为 ssl.conf | |
vim /etc/httpd/conf.d/ssl.conf | |
DocumentRoot "/var/www/html" | |
SSLCertificateFile /etc/pki/tls/certs/httpd.crt | |
SSLCertificateKeyFile /etc/pki/tls/private/httpd.key | |
SSLCACertificateFile /etc/pki/CA/cacert.pem | |
注:注意文件的路径,你放在那里就写成什么路径。3)重启服务,并进行测试 | |
service httpd restart or systemctl restart httpd | |
curl --cacert /path to/cacert.pem https://www.ab.com |
5. 在 B 主机
1》vim /etc/resolv.conf | |
nameserver 192.168.213.128 (尽量就填写一个) | |
2》测试 | |
curl www.ab.com | |
3)CA 证书导入 | |
1》A 证书从 A 主机上拷贝过来 | |
scp root@192.168.213.129:/etc/pki/CA/cacert.pem /root/ | |
2》测试 | |
curl --cacert /root/cacert.pem https://www.ab.com |
当在 B 主机上测试成功时,这个 https 就大致实现了。不过呢,一般都设置个强制跳转,也就是 http 直接跳到 https 上。
6.http 重定向 https(强制跳转)
在 C 主机上 | |
vim /etc/httpd/conf/httpd.conf | |
Redirect temp|permanent / https://www.ab.com | |
注:temp 为临时跳转代号 302,permanent 为永久跳转代号 301,二者二选一。service httpd restart or systemctl restart httpd |
实际上,在实际运行中不是用上面的方法来把 http 重定向为 https 的,而是采用 HSTS。HSTS 使 http 调整到 https 的过程中没有网络过程,减少请求次数,节约了网络资源,所以应用更为广泛。
7.HSTS 实现 http 重定向 https
在 C 主机上 | |
vim /etc/httpd/conf/httpd.conf | |
Header always set Strict-Transport-Security "max-age=15768000" | |
RewriteEngine on | |
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] | |
service httpd restart or systemctl restart httpd |
到此为止,上述就是整个实现 https 的过程,若有什么地方错误,欢迎广大朋友指出!
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-11/148568.htm
正文完
星哥玩云-微信公众号
