实现https

实现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 1D
			@	IN SOA	dns  admin.ab.com. (
								3	; serial
								1D	; refresh
								1H	; retry
								1W	; expire
								3H )	; 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的过程,若有什么地方错误,欢迎广大朋友指出!

原文地址:https://www.cnblogs.com/shenxm/p/7620445.html