HTTP-HTTPS的实现
就目前的互联网形式来看越来越多的网站已经进行全站HTTPS的改造,原因是HTTP这种方式是不加密的,对于目前的互联网来说实在过于危险,所以使用HTTPS是以后的主流。
SSL会话的简化过程
(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书以及选定的加密方式给客户端
(3) 客户端取得证书并进行证书验证 如果信任给其发证书的CA
(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名
(b) 验证证书的内容的合法性:完整性验证
(c) 检查证书的有效期限
(d) 检查证书是否被吊销
(e) 证书中拥有者的名字,与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器, 完成密钥交换 (5) 服务用此密钥加密用户请求的资源,响应给客户端。
配置HTTPS
搭建CA
其实对于个人来说,搭建CA是不现实的,毕竟你的CA也是不可信CA,不过这里走一下流程,毕竟申请证书还挺麻烦的。
找一台服务器做CA,然后在上面执行以下命令搭建CA服务器。
cd /etc/pki/CA (umask 066;openssl genrsa -out private/cakey.pem 4096) openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
就完了,第二条命令用来生成一个私钥,第三条基于私钥生成一个自签名的证书。
然后在服务器上,也就是要做HTTPS的主机上执行以下操作生成一个申请证书的文件发送给CA服务器。
(umask 066 ;openssl genrsa -out web.key 2048) openssl req -new -key web.key -out web.csr
然后将web.csr发送到CA服务器,之后在服务器端颁发证书。在CA服务器执行如下命令:
cd /etc/pki/CA touch index.txt echo 01 > serial openssl ca -in web.csr -out certs/web.crt -days 365
然后将生成的证书文件也就是web.crt发送到HTTP服务器,之后在HTTP服务器进行操作。
配置HTTPS
如果不确定是否已经安装相关模块,那就直接yum安装好了。
yum -y install mod_ssl
安装之后修改/etc/httpd/conf.d/ssl.conf配置文件中的一下几项
DocumentRoot ServerName SSLCertificateFile SSLCertificateKeyFile
第一项表示的是网站的目录,和httpd.conf中一样
第二项是域名,HTTPS的访问时基于域名的,必须有域名。
第三项是证书文件的路径
第四项是私钥文件的路径
其实到这里已经可以通过HTTPS进行访问了。只是需要在访问的时候手动指定HTTPS,这并不合理,所以还需要做一个重定向,将所有的访问重定向到HTTPS,在/etc/httpd/conf/httpd.conf中添加以下配置
Redirect Permanent / https://host
这样的话,所有访问都会被重定向到HTTPS,不过,我们还有更好的实现,倒不是实现方法更高明,而是更安全。
添加HTTPS跳转(重定向)
在/etc/httpd/conf/httpd.conf中添加以下信息
Hander always set Strict-Transport-Security "max-age=86400" RewriteEngine on RewriteRule ^(/.*)$ https://${HTTP_HOST}$1 [redirect=301]
其具体实现的是当用户访问网站后,浏览器会记录下此网站支持HTTPS,在设定的时间内,再次访问此网站会自动请求HTTPS。max-age用来指定时间,单位是秒。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!