@H_301_0@简述:
@H_301_0@https:http over ssl 使用443端口
@H_301_0@SSL会话的简化过程:
@H_301_0@(1) 客户端发送可供选择的加密方式,并向服务器请求证书
@H_301_0@(2) 服务器端发送证书以及选定的加密方式给客户端
@H_301_0@(3) 客户端取得证书并进行证书验证
@H_301_0@ 如果信任给其发证书的CA:
@H_301_0@(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名
@H_301_0@(b) 验证证书的内容的合法性:完整性验证
@H_301_0@(c) 检查证书的有效期限
@H_301_0@(d) 检查证书是否被吊销
@H_301_0@(e) 证书中拥有者的名字,与访问的目标主机要一致
@H_301_0@(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
@H_301_0@(5) 服务用此密钥加密用户请求的资源,响应给客户端
@H_301_0@注意:SSL是基于IP地址实现,单IP的主机仅可以使用一个https虚拟主机
@H_301_0@
@H_301_0@实验:实现https
@H_301_0@方式一、使用自签名证书的https
@H_301_0@(1)yum -y install mod_ssl
@H_301_0@安装完之后只要重新启动httpd服务就支持https了
@H_301_0@(2)测试:基于https访问
@H_301_0@curl -k https://192.168.119.129-k表示忽略证书进行ssl连接,不加-k无法获取网页
@H_301_0@
@H_301_0@测试:curl --cacert cacert.pem https://www.magedu.com-CAfile cacert.pem
@H_301_0@方式二、向CA申请证书的https
@H_301_0@1、yum -y install mod_ssl
@H_301_0@2、创建私有CA
@H_301_0@具体步骤及含义详见博文:http://13150617.blog.51cto.com/13140617/1968017
@H_301_0@本文只在这里列出所需命令及文件:
@H_301_0@cd /etc/pki/CA
@H_301_0@echo 00 > serial
@H_301_0@touch index.txt
@H_301_0@(umask 066;openssl genrsa -out private/cakey.pem 4096)创建私钥文件
@H_301_0@openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 创建CA
@H_301_0@3、客户端申请证书
@H_301_0@(umask 066;openssl genrsa -out /etc/httpd/conf.d/ssl/httpd.key 2048) 创建私钥文件
@H_301_0@openssl req -new -key /etc/httpd/conf.d/ssl/httpd.key -out /etc/httpd/conf.d/ssl/httpd.csr 生成证书签署请求
@H_301_0@
@H_301_0@scp /etc/httpd/conf.d/ssl/httpd.csr 192.168.119.128:/etc/pki/CA/ 将签署请求发送给CA
@H_301_0@4、CA签署证书,并且发放证书
@H_301_0@openssl ca -in httpd.csr -out certs/httpd.crt -days 365 签署证书
@H_301_0@scp certs/httpd.crt 192.168.119.129:/etc/httpd/conf.d/ssl/ 发放证书
@H_301_0@scp cacert.pem 192.168.119.129:/etc/httpd/conf.d/ssl/ CA的证书文件
@H_301_0@5、修改配置文件,使其支持使用ssl,及使用的证书
@H_301_0@vim /etc/httpd/conf.d/ssl.conf
@H_301_0@SSLCertificateKeyFile /etc/httpd/conf.d/ssl/httpd.key 私钥文件
@H_301_0@SSLCertificateFile /etc/httpd/conf.d/ssl/httpd.crt 证书文件
@H_301_0@SSLCACertificateFile /etc/httpd/conf.d/ssl/cacert.pem CA证书
@H_301_0@6、测试:在浏览器访问https://192.168.119.129
@H_301_0@由于自己搭建的CA没有被信任,所以会有风险提示
@H_301_0@
@H_301_0@由于证书是颁发给www.magedu.com,所以url应该是https://www.magedu.com,那么需要加上DNS解析:
@H_301_0@修改:C:\Windows\System32\drivers\etc\hosts
@H_301_0@添加一行 192.168.119.129 www.magedu.com
@H_301_0@然后再访问:
@H_301_0@实验:http重定向到https
@H_301_0@vim /etc/httpd/conf.d/test.conf
@H_301_0@ 添加两行
@H_301_0@ RewriteEngine on 启动重定向引擎
@H_301_0@ RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
@H_301_0@说明:301表示永久跳转,302表示临时跳转
@H_301_0@测试:
@H_301_0@HSTS:HTTP Strict Transport Security
@H_301_0@ 服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程
@H_301_0@HSTS preload list
@H_301_0@ 是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表。
@H_301_0@实现HSTS示例:
@H_301_0@Header always set Strict-Transport-Security "maxage=15768000" 以秒为单位
@H_301_0@RewriteEngine on
@H_301_0@RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301]
@H_301_0@测试: