为网站启用HTTPS

什么是HTTPS

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 
它是一个URI scheme(抽象标识符体系),句法类同http:体系。
用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法。
现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。
作为一个博客,自然不想让在被别人浏览的时候因为运营商劫持而出现莫名的广告。这时候,HTTPS的价值就体现出来了。 

Let's Encrypt 简介

Let's Encrypt 是一个于2015年三季度推出的数字证书认证机构,
将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,
为安全网站提供免费的SSL/TLS证书。

环境说明

    centos 7
    nginx 1.11.7

安装Certbot客户端

    sudo yum install -y certbot

获取证书

    certbot certonly --standalone -d 域名 -d 域名
    添加域名只需在后面加上 -d 你的域名 即可

    如果报如下错误:
    ImportError: 'pyOpenSSL' module missing required functionality. Try upgrading to v0.14 or newer.
    解决方案:
    wget ftp://ftp.muug.mb.ca/mirror/centos/7.3.1611/cloud/x86_64/openstack-mitaka/common/pyOpenSSL-0.15.1-1.el7.noarch.rpm
    sudo rpm -Uvh pyOpenSSL-0.15.1-1.el7.noarch.rpm
    sudo yum install certbot
    注:
    --standalone模式不需要指定网站根目录,它会自动启用服务器的443端口,来验证域名的归属。
    我们有其他服务(例如nginx)占用了443端口,就必须先停止这些服务,在证书生成完毕后再启用。

配置Nginx启用https以及全站启用https

    添加配置:
    ssl on;
    ssl_certificate /etc/letsencrypt/live/diamondfsd.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/diamondfsd.com/privkey.pem;

    location / {
           proxy_pass http://127.0.0.1:2369; # 根据实际情况填写
           proxy_http_version 1.1;
           proxy_set_header X_FORWARDED_PROTO https;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;

        }

自动更新SSL证书

由于Let's Encrypt提供的证书只有90天的有效期,我们必须在证书到期之前重新获取。
certbot 给我们提供了一个很方便的命令,那就是 certbot renew。
测试命令:
certbot renew --dry-run
在运行时如报如下错误需要先停掉Nginx再运行。
    Attempting to renew cert from /etc/letsencrypt/renewal/api.diamondfsd.com.conf produced an unexpected error: At least one of the required ports is already taken.. Skipping.
如测试通过即可进行下面的步骤。

创建定时任务自动更新

新建一个文件,文件名随意,内容如下
    15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
--pre-hook 这个参数表示执行更新操作之前要做的事情,因为我有 --standalone 模式的证书,所以需要 停止 nginx 服务,解除端口占用。
--post-hook 这个参数表示执行更新操作完成后要做的事情,这里就恢复 nginx 服务的启用
然后用 crontab 来启动这个定时任务
    crontab 文件名

后记

此处没有后记。
上一篇:  JAVA实现百度ECharts图表
下一篇:  Spring-Data-Jpa实现简单分页  
评论

如果我的文章对你有帮助,或许可以打赏一下呀!

支付宝
微信
QQ