Nginx配置SSL使用Let’s Encrypt免费为网站开启https

Nginx配置SSL使用Let’s Encrypt免费为网站开启https,本文介绍服务器配置教程如何在nginx 服务器上使用免费的Let’s Encrypt 凭证,提供HTTPS 的安全加密网页。

Nginx配置SSL使用Let’s Encrypt免费为网站开启https
Nginx配置SSL使用Let’s Encrypt免费为网站开启https

Nginx配置SSL使用Let’s Encrypt免费为网站开启https,本文介绍服务器配置教程如何在nginx 服务器上使用免费的Let’s Encrypt 凭证,提供HTTPS 的安全加密网页。

Let’s Encrypt是一家新的证书颁发机构(Certificate Authority,简称CA),其提供免费的TLS/SSL凭证再配合Certbot这个自动化工具,让一般的网站可以很容易地使用HTTPS的安全加密网页,设定很简单,凭证的更新也可以自动处理。

以下我以Ubuntu Linux 14.04 的系统为例,ubuntu nginx配置ssl,示范nginx 伺服器使用Let’s Encrypt 凭证设定HTTPS 安全加密网页的方法。

下载Let’s Encrypt SSL 凭证

Let’s Encrypt 的凭证可以透过官方建议的Certbot 自动化工具来下载,以下是操作步骤。

STEP 1

从Certbot官方网站下载certbot-auto指令稿,并设定其执行权限:

wget https://dl.eff.org/certbot-auto
 chmod a+x certbot-auto

certbot-auto要放在哪里都可以,建议一开始就找一个适合的地方放好,例如建立一个/opt/letsencrypt目录,把certbot-auto放在这里:

mkdir /opt/letsencrypt
 mv certbot-auto /opt/letsencrypt/

STEP 2

执行certbot-auto,让它自动安装所有相依套件:

/opt/letsencrypt/certbot-auto

执行certbot-auto时,会需要输入密码取得root权限。

STEP 3

安装完成所有需要的系统套件后,接着我们要透过webroot的方式,使用既有的nginx网页伺服器来向Let’s Encrypt取得凭证,而在认证的过程会需要在网页根目录中建立一个.well-known/acme-challenge/目录,让Let’s Encrypt的伺服器来读取其中的内容。

一般的nginx伺服器通常会设定把句点开头的隐藏档案都挡掉,遇到这样的状况就会无法进行认证,这时候可以再加一小段设定,让.well-known/acme-challenge/目录可以被正常读取:

location ^~ /.well-known/acme-challenge/ { 
  # the usual settings
}

location ~ /. { 
	deny all;
}

STEP 4

使用certonly功能下载凭证:

/opt/letsencrypt/certbot-auto certonly --webroot  -w /var/www/blog.gtwang.org/ -d blog.gtwang.org -d gtwang.org

STEP 5

输入自己的Email 信箱。

Nginx配置SSL使用Let’s Encrypt免费为网站开启https 1

STEP 6

阅读使用条款,选择「Agree」继续。

Nginx配置SSL使用Let’s Encrypt免费为网站开启https 2

STEP 7

下载完成后,会出现类似这样的成功讯息。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/blog.gtwang.org/fullchain.pem. Your cert will
   expire on 2016-08-13. To obtain a new version of the certificate in
   the future, simply run Certbot again.
 - 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

这样就成功取得Let’s Encrypt的凭证了,而nginx用的凭证就储存在/etc/letsencrypt/live/blog.gtwang.org/目录之下,其中fullchain.pem就是nginx需要凭证,而privkey.pem则是需要保护好的私钥,关于凭证档案的详细说明,请参考Certbot的说明文件

Certbot还有提供另外一个standalone的方式来向Let’s Encrypt取得凭证,这种方式是由Certbot建立一个独立的网页伺服器,提供Let’s Encrypt读取验证用的资料,不过这样的做法需要绑定80443连接埠,所以通常还会需要暂停既有的网页伺服器,对于一般的网站而言,会造成网站有几秒钟的断线现象,所以我个人不喜欢这样的方式。

接下来要设定nginx 伺服器,使用这个新凭证来提供HTTPS 的安全加密网页。

Nginx配置SSL

要让nginx 启用HTTPS 安全加密网页,只要加上SSL 相关的几行设定即可,ubuntu nginx配置ssl,其余的设定保持不变,以下是我个人使用的nginx 伺服器设定:

server {
   #倾听HTTPS标准埠号443 
  listen 443;

  #同时启用IPv6的HTTPS安全加密网页
  listen [::]:443;

  server_name blog.gtwang.org;

  root /var/www/blog.gtwang.org/;
   index index.php index.html index.htm;

  #启用SSL 
  ssl  on ;

  #设定SSL凭证
  ssl_certificate /etc/letsencrypt/live/blog.gtwang.org/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/blog.gtwang.org/privkey.pem;

  #其他SSL选项
  ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # omit SSLv3 because of POODLE (CVE-2014-3566) 
  ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA -AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA :ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE -RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3 -SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS' ;
   ssl_prefer_server_ciphers  on ;

  # ... 
}

ssl_protocols的部分记得要把SSLv3拿掉,ubuntu nginx配置ssl,避免POODLE攻击(CVE-2014-3566)。

如果不想自己写Nginx的设定档,也可以使用Mozilla所提供的Mozilla SSL Configuration Generator设定档产生工具。

设定好之后,检查一下设定档是否正确:

service nginx configtest

确认无误之后,重新载入设定档:

service nginx reload

这样就完成nginx 伺服器的设定了,接着就可以开启HTTPS 加密的网址来测试了,正常来说,使用Google Chrome 浏览器开启自己主机的HTTPS 加密网址,应该就会显示一个绿色的锁头,这样就代表我们安装的SSL 凭证是有效的。

Nginx配置SSL使用Let’s Encrypt免费为网站开启https 3

如果想要检视凭证的内容,可以点击网址列的绿色锁头,里面可以看到凭证的详细资料。

Nginx配置SSL使用Let’s Encrypt免费为网站开启https 4

另外也可以使用Qualys的SSL伺服器测试工具来检测。

自动更新SSL 凭证

Let’s Encrypt的凭证使用期限只有三个月,在凭证到期前的一个月可以使用certbot-auto来更新凭证,在实际更新之前我们可以加入--dry-run参数,先进行测试:

/opt/letsencrypt/certbot-auto renew --dry-run

若测试没问题,就可以使用正式指令来更新:

/opt/letsencrypt/certbot-auto renew --quiet --no-self-upgrade

而为了方便起见,可以将这个更新指令写在/opt/letsencrypt/renew.sh指令稿中:

#!/bin/sh 
/opt/letsencrypt/certbot-auto renew --quiet  --no-self-upgrade  --post-hook  " service nginx reload "

这里我又加上一个--post-hook的设定,让凭证更新完后,可以自动重新载入nginx伺服器的设定,让凭证生效。

接着把这个/opt/letsencrypt/renew.sh指令稿写进crontab中:

# mh dom mon dow command 
30 2 * * 0  /opt/letsencrypt/renew.sh

官方的建议是这个指令可以一天执行两次,让伺服器的凭证随时保持在最新的状态,这里我是设定让伺服器每周日凌晨两点半进行凭证的检查与更新,Certbot 只有在凭证到期前一个月才会进行更新,如果凭证尚未到期,就不会更新。

转载文章,原文链接:https://blog.gtwang.org/linux/secure-nginx-with-lets-encrypt-ssl-certificate-on-ubuntu-and-debian/

加入电报群

【江湖人士】(jhrs.com)原创文章,作者:江小编,如若转载,请注明出处:https://jhrs.com/2018/22251.html

扫码加入电报群,让你获得国外网赚一手信息。

文章标题:Nginx配置SSL使用Let’s Encrypt免费为网站开启https

(0)
江小编的头像江小编
上一篇 2018-05-14 09:17
下一篇 2018-05-14 09:19

热门推荐

Leave a Reply

Sending

国外老牌便宜域名服务商Namecheap注册com域名大优惠,抢到就赚到,优惠码:NEWCOM698
$5.98/年
直达官网