阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Let’s Encrypt启用加密(HTTPS)网站

191次阅读
没有评论

共计 3499 个字符,预计需要花费 9 分钟才能阅读完成。

介绍

Let’s Encrypt 是一个免费并且开源的 CA,且已经获得 Mozilla、微软等主要浏览器厂商的根授信。它极大低降低 DV 证书的入门门槛,进而推进全网的 HTTPS 化。

Certbot is an easy-to-use client that fetches a certificate from Let’s Encrypt—an open certificate authority launched by the EFF, Mozilla, and others—and deploys it to a web server.

本文所有的操作均在 Ubuntu14.04 下进行安装和配置。

安装

直接安装 Let’s Encrypt 相对比较复杂和费事。为了简化安装步骤,我们就直接使用 Let’s Encrypt 官网推荐的自动部署脚本 Certbot。
根据环境选择,我们选择 Nginx+Ubuntu14.04,进入官方推荐脚本页面,脚本如下:

$ sudo apt-get update
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install Python-certbot-nginx

因为我本机已经有了 python 和 Nginx,所以我的脚本简化为了

sudo apt-get update
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot

接下来,我们要生成自己的证书。

  • 获取证书前需要先停止 Nginx 服务

    service nginx stop
  • 生成单域名证书

    certbot certonly --standalone --email your@email.com -d yourdomain.com

    Tips:
    yourdomain.com 目前必须是你的绝对域名,因为 Let’s Encrypt 暂时还不支持泛域名,但是根据官方的消息说,预计 2018 年一月,会实现支持。Wildcard Certificates Coming January 2018

到此,如果没有什么意外,执行完命令之后,你就可以看到你的证书创建成功的提示!默认是在 /etc/letsencrypt/live 路径下。

Nginx 配置

有了证书,接下来我们就可以配置 Nginx 了。
进入 Nginx 的配置文件夹(/etc/nginx/sites-available/),创建一个 ssl.conf 配置文件,在里面增加一个 server 配置。
配置的内容,基本和监听 http 的配置相似,主要的区别是监听 443 端口和证书的加载,一个例子如下:

server {# SSL configuration

    listen 443 ssl;
    listen [::]:443 ssl;
    ssl on;

    ssl_certificate   /etc/letsencrypt/live/123456.cloud/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/123456.cloud/privkey.pem;
    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;

    root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        location / {# First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                try_files $uri $uri/ =404;
        }
}

保存,然后 reload ngxin(nginx -s reload)配置。这时候我们就可以在域名前加上 https,就可以发现成功了!

仅限 Https 访问

有了 Https,我们一般也就不想要 http 的访问了,或者说想把所有的 http 请求转为 https。方法有很多种,我的方法是使用 rewrite,把原先的 Http 全部转化为 Https。
一个例子如下:

server {listen 80 default_server;
    listen [::]:80 default_server;

    server_name 123456.cloud;
    rewrite ^(.*) https://$server_name$1 permanent;

}

自此,个人小站的 Https 加密工作完成。

Github Pages 使用 Https

一般来说,我们都会把自己的 Github Pages 博客定义成自己的域名。但是会发现,变为自己的域名之后,就没有 Https 了。所以为了能让我们的博客也用上 Https,这时候也要折腾一下了。
原理很简单,就是用自己的服务器进行反向代理, 实际上访问 Github Pages 博客就是访问自己的服务器。
我自己的配置如下,

server {# SSL configuration

        listen 443 ssl;
        listen [::]:443 ssl;
        ssl on;

        server_name blog.123456.cloud;

        ssl_certificate   /etc/letsencrypt/live/blog.123456.cloud/fullchain.pem;
        ssl_certificate_key  /etc/letsencrypt/live/blog.123456.cloud/privkey.pem;
        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;

        location / {proxy_set_header   X-Real-IP $remote_addr;
                proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header   Host $http_host;
                proxy_pass         http://151.101.229.147;
    }

}

这里需要注意的是,proxy_pass 的地址是 ping 自己的 Github Pages 地址得到的,也就是那个.io 结尾的地址。然后在你的域名提供商那里,修改你博客的 A 地址解析就可以了。
当然,如果这里你也仅限 Https 访问的话,把你的 http 监听也进行 rewrite 一下就好了!

证书续期

Let’s Encrypt 生成的免费证书为 3 个月时间,使用 certbot renew 可以无限免费续签 Https 证书。
为了方便,我们可以使用 crontab 进行自动续期。注意在使用 certbot renew 的时候,要先关闭 nginx 才能成功。

常见的问题

1、Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping
原因和解决方案:这是因为 80、443 端口被占用,解除对端口的占用即可,例如执行 service nginx stop ^_^

2、DNS 解析生效慢
解决方案:你的域名供应商一般都会提供 DNS 服务器,ping 一下 dns 服务器,得到 IP。然后在你本机的 DNS 配置里,换成 ping DNS 服务器得到 IP 既可。

3、Nginx 配置不起作用,DNS 也不起作用
解决方案:
(1)、换除 Chrome 以外的浏览器
(2)、在 Chrome 中,F12 打开控制台,按住刷新按钮,选择‘清空缓存并硬性重新加载’
Chrome 为了加快速度,这个的缓存机制倒是挺讨厌的。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149746.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计3499字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中