HTTP-HTTPS的实现

​ 就目前的互联网形式来看越来越多的网站已经进行全站HTTPS的改造,原因是HTTP这种方式是不加密的,对于目前的互联网来说实在过于危险,所以使用HTTPS是以后的主流。

SSL会话的简化过程

(1) 客户端发送可供选择的加密方式,并向服务器请求证书

(2) 服务器端发送证书以及选定的加密方式给客户端

(3) 客户端取得证书并进行证书验证 如果信任给其发证书的CA

​ (a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名

​ (b) 验证证书的内容的合法性:完整性验证

​ (c) 检查证书的有效期限

​ (d) 检查证书是否被吊销

​ (e) 证书中拥有者的名字,与访问的目标主机要一致

(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器, 完成密钥交换 (5) 服务用此密钥加密用户请求的资源,响应给客户端。

配置HTTPS

  1. 搭建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服务器进行操作。

  2. 配置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,不过,我们还有更好的实现,倒不是实现方法更高明,而是更安全。

  3. 添加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 协议 ,转载请注明出处!