【SSL】Let‘s Encrypt的SSL证书配置

写在前面:

Let’s Encrypt 是电子前哨基金会(EFF)发布的免费 SSL 证书服务,Google,Mozilla 和 Microsoft 都极力支持。很早之前就听说了 Let’s encrypt,当时碍于其证书有效期短,并且配置麻烦,遂懒得折腾。最近发现他们的网站发布了工具和一系列自动化的工作流配置。尝试了一下,还蛮不错。

如果你的域名是在 阿里云 买的,那么恭喜你可以直接在 阿里云 申请免费的SSL证书,前段时间写过一篇可参考:【Nginx】域名添加 HTTPS 证书

环境准备:

  • Ubuntu 16.04
  • Nginx
  • 域名: zhaoshuai.me

安装 Certbot:

【SSL】Let‘s Encrypt的SSL证书配置

Certbot 专门用来部署 Let’s Encrypt 的工具,其官网会根据使用的web服务器软件和操作系统平台,提供响应的安装工具和安装方法。

我这里选择了 NginxUbuntu16.04 的组合。会看到网站跳转到一个简易的使用文档。使用下面的命令安装即可:

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot python-certbot-nginx 

生成 SSL 证书:

我们可以看一下 certbot 的配置选项:

【SSL】Let‘s Encrypt的SSL证书配置

在这里我们使用 –nginx 这个配置选项, 因为我们上面安装了 python-certbot-nginx 小工具。

sudo certbot --nginx -d zhaoshuai.me -d www.zhaoshuai.me

如果这是您第一次运行 certbot,系统将提示您输入电子邮件地址并同意服务条款。执行此操作后,certbot 将与 Let’s Encrypt 的加密服务器通信,然后运行质询以验证您是否控制了您要为其申请证书的域。

如果成功,certbot 将询问您要如何配置HTTPS设置:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
  • 选择【1】是不做重定向,通过 HTTP 和 HTTPS 都可以访问;
  • 选择【2】是将所有请求重定向到 HTTPS

我是选择 【2】,这样可以帮我们生成 Nginx 的配置文件,点击 ENTER ,会有成功提示,并说明证书放在 /etc/letsencrypt/live/**** 这里。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/zhaoshuai.me.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://zhaoshuai.me

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=zhaoshuai.me
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/zhaoshuai.me/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/zhaoshuai.me/privkey.pem
   Your cert will expire on 2019-09-09. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

然后我们打开 Nginx 配置:

vim /etc/nginx/conf.d/zhaoshuai.me.conf

将请求打到我们自己的项目中去,具体参考:

server {
    listen 80;
    server_name zhaoshuai.me;
    access_log /data0/www/logs/zhaoshuai.me.access_log;
    error_log /data0/www/logs/zhaoshuai.me.error_log;
    root /data0/www/htdocs/zhaoshuai.me;

    location / {
        root /data0/www/htdocs/zhaoshuai.me;
        index  index.php index.html index.htm;
        if (!-e $request_filename){
             rewrite ^/(.*) /index.php last;
        }
    }

    location ~ \.php$ {
        set $real_script_name $fastcgi_script_name;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$real_script_name;
        include        fastcgi_params;
    }
}
server {
    listen 443;
    server_name zhaoshuai.me;
    ssl on;
    root /data0/www/htdocs/zhaoshuai.me;
    access_log /data0/www/logs/zhaoshuai.me.access_log;
    error_log /data0/www/logs/zhaoshuai.me.error_log;
    index index.html index.htm index.php;
    ssl_certificate   cert/1539297736883.pem;
    ssl_certificate_key  cert/1539297736883.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;

    location / {
        root /data0/www/htdocs/zhaoshuai.me;
        index  index.php index.html index.htm;
        if (!-e $request_filename){
             rewrite ^/(.*) /index.php last;
        }
    }

    location ~ \.php$ {
        set $real_script_name $fastcgi_script_name;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$real_script_name;
        include        fastcgi_params;
    }
}

记得重启 Nginx ,这样可以生效配置。

验证Certbot自动续订

Let’s Encrypt 的证书只有 90 天有效。这是为了鼓励用户自动执行证书续订过程。我们安装的 certbot 软件包通过systemd 计时器每天运行两次 “certbot renew” 来为我们解决这个问题。在非系统发行版上,此功能由放置在 /etc/cron.d 的脚本提供。此任务每天运行两次,并将续订任何在到期后30天内的证书。

要测试更新过程,您可以用 certbot 执行以下操作:

sudo certbot renew --dry-run

如果您没有看到任何错误,那么您已经完成了设置。必要时,Certbot 将续订您的证书并重新加载Nginx以获取更改。如果自动续订过程失败,Let’s Encrypt 将向您指定的电子邮件发送一条消息,并在您的证书即将过期时发出警告。

写在最后:

推荐一个可以生成 Nginx 配置的网站:https://mozilla.github.io/server-side-tls/ssl-config-generator/

喜欢(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

小北在线

小北在线

  • 扫描二维码,微信联系 扫描二维码,微信联系