Centos7 配置 nginx 使用 let's Encrypt 证书
let’s Encrypt 提供的免费的 ssl 证书申请流程已经非常简便,使用度也非常高。证书的申请方法有很多中,这里记录最简单的一种。let’s Encrypt 免费证书有效期 90 天,续用更新会相应减少期限,各种续期提醒会准时发送邮件到域名配置的邮箱
流程及注意
有些 let’s Encrypt 证书安装方法需要用到 python2.7 及以上,centos6 默认是 python2.6 版本,需要做相应升级。centos7 可以直接跳过。
申请证书之前如果 80 或 443 端口被监听,例如 nginx 已经在使用,就必须把 nginx 停掉,不然会申请失败。
安装过程超简单
先下载 let’s Encrypt 指定的安装控件
git clone https://github.com/letsencrypt/letsencrypt
有可能会遇到报错,多是源或者网络的问题,按报错信息基本能自行解决
cd letsencrypt
./letsencrypt-auto certonly --standalone --email xxx@xxx.org -d xxx1.org -d xxx2.org
其中 email 填入邮箱,-d 填入有效域名,可单个可多个
./letsencrypt-auto 可以有其他指令操作,可以--help 查看
申请指令执行后会自动更新环境需要的各种依赖,当然也有跳过的参数,日志中有提示--no-bootstrap
然后简单的手动同意流程
当看到- Congratulations!开头的一段日志就 OK 了。
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/pushweb.onethird.com.cn/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/pushweb.onethird.com.cn/privkey.pem
Your cert will expire on 2018-07-26. To obtain a new or tweaked
version of this certificate in the future, simply run
letsencrypt-auto again. To non-interactively renew *all* of your
certificates, run "letsencrypt-auto 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
server {
listen 80;
server_name pan.isuanyun.com;
add_header Strict-Transport-Security max-age=15768000;
rewrite ^(.*) https://$server_name$1 permanent;
}
openssl dhparam -out dhparam.pem 2048
因为是外网服务器,偶尔会有访问不通的情况,多试几次或者换一个时间段试。
证书申请成功之后在/etc/letsencrypt/live/下会生成相应文件
|-- /etc/letsencrypt/live/
|--域名
|-- cert.pem - Apache服务器端证书
|-- chain.pem - Apache根证书和中继证书
|-- fullchain.pem - Nginx所需要ssl_certificate文件
|-- privkey.pem - 安全证书KEY文件
主要用到 fullchain.pem,privkey.pem 两个文件
nginx 主要配置
server{
listen 443 ssl;
listen [::]:443 ssl;
server_name images.isuanyun.com;
ssl_certificate /etc/letsencrypt/live/images.isuanyun.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/images.isuanyun.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/letsencrypt/live/images.isuanyun.com/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
location / {
resolver 114.114.114.114 valid=5s;
set $upstream "http://centrexzj.vicp.cc:13013";
index index.html index.php;
proxy_buffers 32 64k;
proxy_busy_buffers_size 256k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 100m;
proxy_connect_timeout 360;
port_in_redirect off;
real_ip_header X-Forwarded-For;
proxy_pass http://tu_server; #映射子域名到对应的后端请求
}
}
再刷新 nginx 配置
service nginx reload
证书更新
在 let’s Encrypt 安装目录下
./certbot-auto renew --force-renew
有可能会提示 python 版本问题,如果是 python2.7 以下的就需要升级,注意重新配置 2.6 的引用,不然命令行会失效
证书自动续期
证书续期的命令如下:
./letsencrypt-auto renew
如果要指定更新某个域名的证书, 则要使用 certonly 参数, 其实和新申请证书时的命令差不多.
./letsencrypt-auto certonly --standalone --email m19923251012@163.com -d pan.isuanyun.com
通过 cron 运行脚本的方式可以实现定时续期, 官方提供了脚本示例. https://letsencrypt.org/getting-started/ 最下面
最终脚本如下:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于