https和http的主要区别:
一、https协议需要到ca机构申请ssl证书(如沃通CA),另外沃通CA还提供3年期的免费ssl证书
[http://freessl.wosign.com](http://freessl.wosign.com/),高级别的ssl证书需要一定费用。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,http是80端口,https是443端口。
四、http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证
的网络协议,比http协议安全。
【如何搭建https站点】
说到https站点的搭建,就不得不提到ssl协议。ssl是Netscape公司率先采用的网络安全协议。它是在
传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术。ssl广泛支持各种类型的网络,同时提供
三种基本的安全服务,它们都使用公开密钥技术。
ssl的作用:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
2)加密数据以防止数据中途被窃取;
3)维护数据的完整性,确保数据在传输过程中不被改变。
而ssl证书指的是在ssl通信中验证通信双方身份的数字文件,一般分为服务器证书和客户端证书,我们通
常说的ssl证书主要指服务器ssl证书。ssl证书由受信任的数字证书颁发机构CA(如沃通WoSign),在验证服务
器身份后颁发,具有服务器身份验证和数据传输加密功能。分为扩展验证型EV ssl证书、组织验证型OV ssl证
书和域名验证型DV ssl证书。
实现https
环境
1.三台主机分别为A,B,C。
2.A主机设置为CA和DNS服务器,ip为172.18.70.40
3.B主机为client,ip为172.18.70.70
4.C主机为httpd server,ip为172.18.70.80
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 172.18.70.40
websrv A 172.18.70.40
mail A 172.18.70.40
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 172.18.70.80
测试:
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@172.18.70.80:
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@172.18.70.40:
scp /etc/pki/CA/private/cakey.pem root@172.18.70.40:
4.在C主机
1)安装mod_ssl模块
yum -y install mod_ssl
2)编辑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)重启服务,并进行测试
httpd -t 检查语法
service httpd restart or systemctl restart httpd
ss -tnl | grep 443 查看是否监听在443端口
curl --cacert /path to/cacert.pem https://www.ab.com
5.在B主机
1》vim /etc/resolv.conf
nameserver 172.18.70.40 (尽量就填写一个)
2》测试
curl www.ab.com
3)CA证书导入
1》A证书从A主机上拷贝过来
scp root@172.18.70.70:/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
8、用IE浏览器验证,因为这是自签名证书,浏览器会报警说不安全,点继续流量就好了。
客户机上输入:https://服务器ip地址