Fork me on GitHub

使用LetsEncrypt配置网站https

使用LetsEncrypt配置网站https

Let’s Encrypt介绍

Let’s Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。
免费SSL证书的出现,也会对传统提供付费SSL证书服务的商家有不小的打击。到目前为止,Let’s Encrypt获得IdenTrust交叉签名,这就是说可以应用且支持包括FireFox、Chrome在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。
虽然目前Let’s Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用。

实践操作

环境介绍

1
2
3
4
5
6
7
8
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
# uname -r
3.10.0-693.el7.x86_64
# uname -m
x86_64
# nginx -v
nginx version: nginx/1.12.2

使用Certbot ACME客户端配置

第一步:选择软件及操作系统版本
https://certbot.eff.org/
根据提示选择Web服务器软件及操作系统版本

第二步:设置域名解析
使用工具配置证书时需要域名可以被正确解析到,请提前做好域名解析。
第三步:安装Certbot tools及配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# yum install certbot-nginx
# certbot --nginx # 获取证书及配置nginx
# certbot --nginx certonly # 只生成证书不自动配置nginx
# certbot renew --dry-run # 重新获取证书
# cd /etc/letsencrypt/live/www.cwquery.com
# ls -l
total 4
lrwxrwxrwx 1 root root 39 Mar 8 14:07 cert.pem -> ../../archive/www.cwquery.com/cert1.pem
lrwxrwxrwx 1 root root 40 Mar 8 14:07 chain.pem -> ../../archive/www.cwquery.com/chain1.pem
lrwxrwxrwx 1 root root 44 Mar 8 14:07 fullchain.pem -> ../../archive/www.cwquery.com/fullchain1.pem
lrwxrwxrwx 1 root root 42 Mar 8 14:07 privkey.pem -> ../../archive/www.cwquery.com/privkey1.pem
-rw-r--r-- 1 root root 543 Mar 8 14:07 README
This directory contains your keys and certificates.

`privkey.pem` : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem` : will break many server configurations, and should not be used
without reading further documentation (see link below).

We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

配置nginx如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
    server {
server_name www.cwquery.com; # managed by Certbot
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/www.cwquery.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/www.cwquery.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

set $rootdir /usr/share/nginx/html;

if ($remote_addr ~ "123.124.197.100") {
set $rootdir "/usr/share/nginx/test";
}

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

location / {
root $rootdir;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

server {
if ($host = www.cwquery.com) {
return 301 https://$host$request_uri;
} # managed by Certbot

server_name www.cwquery.com;
return 404; # managed by Certbot

}

第四步:设置定时重新获取证书

1
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew

效果展示

谷歌浏览器测试

证书信息

总结

通过以上几个步骤的学习和应用,我们肯定学会了利用Let’s Encrypt免费生成和获取SSL证书文件,随着Let’s Encrypt的应用普及,SSL以后直接免费不需要购买,因为大部分主流浏览器都支持且有更多的主流商家的支持和赞助,HTTPS以后看来也是趋势。在Let’s Encrypt执行过程在中我们需要解决几个问题。
1、域名DNS和解析问题。在配置Let’s Encrypt免费SSL证书的时候域名一定要解析到当前服务器,而且DNS尽量用海外域名DNS,如果用国内免费DNS可能会导致获取不到错误。
2、Let’s Encrypt默认是90天免费,需要手工或者自动续期才可以继续使用

参考资料

https://letsencrypt.org/
https://certbot.eff.org/

======================================================
希望各位朋友支持一下

本文作者:dongsheng
本文地址https://mds1455975151.github.io/archives/78579e83.html
版权声明:转载请注明出处!

坚持技术分享,您的支持将鼓励我继续创作!