网站开启HTTPS方法记录

HTTPS是建立在SSL/TLS之上的超文本传输协议,通过加密来提高安全性,防止双方身份被冒充或传输的数据被篡改。随着Google搜索提升HTTPS网站排名的优先级,Apple宣布App Store中的应用必须启用App Transport Security(ATS)安全功能(强制App通过HTTPS联网),HTTPS的大趋势又向前迈了一大步。相比HTTP,HTTPS虽然消耗了额外的网络资源和计算资源,但在互联网大规模兴起的当代,数据传输的安全性显得更加重要。

HTTPS简析

  1. 浏览器发起对某域名www.xxxx.com的请求,经过域名解析,请求被发送到一个固定IP的服务器上。服务器收到请求后返回自己的“身份信息”,即证书,包含了网站地址、网站公钥、证书的签发机构等,以此向浏览器证明我就是www.xxxx.com。证书本身是用签发机构的私钥加密的,只要这个私钥不泄露,别人就不能随意伪造证书。
  2. 浏览器收到证书后,用其内置的受信任签发机构的公钥去解密证书,如果解密失败或解密后验证其他信息失败,则提示安全警告阻止访问。尽管如此,用户仍然可以选择信任该证书,继续访问网站。无论哪种情况,当证书被浏览器接受后,证书中的网站公钥被信任为不是中间人伪造的。然后浏览器将随机生成一段对称加密算法的密钥,用于加密和解密后续与服务器之间的通信数据。该密钥用证书中的网站公钥加密发给服务器,服务器收到后用私钥打开得到浏览器生成的密钥。
  3. 浏览器与服务器用浏览器生成的密钥加密解密通信数据。

开启HTTPS过程

本篇以wordpress为例,记录开启HTTPS的过程。

  1. 首先,去阿里云或其他颁发证书的机构申请一个证书(CA),对于个人网站来说,一个免费的DV SSL证书就够用了。除了证书文件外,不同的应用服务器还需要一些其他文件。将证书文件*.pem和其他需要的文件一起下载,然后上传到服务器主机。

    https-001

  2. 对于Nginx来说,需要证书文件xxxx.pem和证书私钥文件xxxx.key。文件在服务器存放的位置任意,这里选择放在Nginx根目录下的cert目录下。

    修改nginx配置文件:

    #设置80端口的请求301重定向到HTTPS
    server {
        listen         80;
        server_name    www.wanghengbin.com  *.wanghengbin.com;
        return         301 https://www.wanghengbin.com$request_uri;
    }
    #将之前的80端口配置改成443端口,并开启ssl
    server {
        listen 443;
        server_name www.xxxx.com  *.xxxx.com;
        root /data/wordpress;
    
        ssl on;
        ssl_certificate   cert/214339934230127.pem;
        ssl_certificate_key  cert/214339934230127.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
    
        #ssl_dhparam /etc/ssl/private/dhparam.pem;
        
        #location / {
        #    root html;
        #    index index.html index.htm;
        #}
    
        ......
    }
    
  3. 修改数据中的url的传输协议部分。

    在mysql数据库执行以下语句,批量替换http为https:

    update wp_posts set post_content = replace(post_content, 'http://www.xxxx.com','https://www.xxxx.com');
    

    在“仪表盘”修改所有固定链接,包括站点地址,WordPress地址,菜单,自定义插件内容等。

  4. 进一步加强SSL安全性。

    测试SSL安全性的地址,https://www.ssllabs.com/ssltest/

    如果出现OpenSSL Padding Oracle vulnerability,需要升级openssl。

    如果出现This server supports weak Diffie-Hellman,先生成dhparam.pem文件,然后在nginx增加配置ssl_dhparam /etc/ssl/private/dhparam.pem;

    cd /etc/ssl/private/
    openssl dhparam -out dhparam.pem 4096
    
Creative Commons License

本文基于署名-非商业性使用-相同方式共享 4.0许可协议发布,欢迎转载、使用、重新发布,但请保留文章署名wanghengbin(包含链接:https://wanghengbin.com),不得用于商业目的,基于本文修改后的作品请以相同的许可发布。

发表评论