自动申请Let's Encrypt的https加密证书,过期后自动更新
Let's Encrypt 简介
如果要启用HTTPS,我们就需要从证书授权机构(以下简称CA) 处获取一个证书,Let's Encrypt 就是一个 CA。我们可以从 Let's Encrypt 获得网站域名的免费的证书。
Certbot 简介
是Let's Encrypt官方推荐的获取证书的客户端,可以帮我们获取免费的Let's Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的,
Certbot工作原理(--webroot模式)
不论是第一次申请证书,还是更新证书,Certbot都会发起一次ACME请求,来验证你是否拥有该域名。如果验证通过,Certbot就会将新证书安装到本地服务,其实就是将证书保存在一个目录中。证书一般包含两个文件(包含公钥、私钥以及证书等信息),web服务器需要配置使用这两个证书文件,来实现HTTPS访问。
ACME验证过程如下:
-
假设你有一个域名:xxxx.com,和一个公网IP:xxx.xxx.xxx.xxx,并设置好了DNS解析;
-
配置好一台web服务器,在80端口和443端口接受examle.com的请求;
-
Certbot向Let's Encrypt发起证书申请; -
Let's Encrypt返回Certbot一个唯一的token,并会自动把token存放在你的服务器根目录;.well-known/acme-challenge/里(注意:该文件不能删除,证书过期后自动更新证书时会验证token是否一致) -
配置好web服务器,使Certbot可以通过url:
http://xxxx.com/.well-known/acme-challenge/{token}访问到token; -
Let's Encrypt CA访问上述url,如果获取到的token和它发送给Certbot的token一致,就可以证明你拥有该域名,就安装证书,位置在/etc/letsencrypt/live/目录下
安装certbot命令:
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
申请证书命令:采用(--webroot模式)
certbot certonly --webroot -w /var/www/html/www.xxxx.com -d www.xxxx.com
注意:-w:指定该域名的根目录;-d:指定域名
证书文件说明:
cert.pem - Apache服务器端证书
chain.pem - Apache根证书和中继证书
fullchain.pem - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件
证书自动续期:
命令:crontab -e
在定时文件写入即可:
0 */12 * * * certbot renew --quiet --renew-hook "/etc/init.d/nginx reload"
nginx1.4 ssl配置
nginx.conf文件的http里开启ssl
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
sites-available/www.xxxx.com开启443端口监听:
#listen 80 default_server;
#listen [::]:80 default_server;
# SSL configuration
listen 443 ssl; #要去掉default_server不然多个域名会有多个配置文件都有listen 443 ssl default_server会报错
# listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/www.xxxx.com/fullchain.pem; # 指定证书的位置,绝对路径
ssl_certificate_key/etc/letsencrypt/live/www.xxxx.com/privkey.pem; # 绝对路径,同上
ssl_session_timeout 5m;
实现步骤;
1、配置nginx可以访问 http://xxxx.com/.well-known/acme-challenge/目录下的文件
2、安装certbot
3、申请证书命令:采用(--webroot模式)
4、nginx1.4 ssl配置,可以https访问
5、/.well-known/acme-challenge目录下的文件{token}不能删除,以后自动更新证书会用到
注意事项:
1、确保url:http://xxxx.com/.well-known/acme-challenge/{token}可以通过web服务器访问
因为还没有完成http加密,所以还要用http访问,那怎样可以访问 /.well-known/acme-challenge目录下的文件,需在nginx配置文件的80端口如下设置即可访问到该文件
该域名配置80端口需添加如下:
location '/.well-known/acme-challenge' {
root /var/www/html/www.xxxxx.com;
}
2、申请证书(certbot certonly --webroo)验证连续5次认证失败,需等一小时在申请证书认证(官方的限制)
3、命令certbot certonly --webroo 的 -w 设置的根目录要为www.xxxx.com的网站目录,
如:当出现多个子域名时,都部署在服务器的/var/www/html下创建子域名目录时,创建了www.xxxx.com目录,则-w的值为:/var/www/html/www.xxxx.com -d的值为:www.xxxx.com
参考:https://blog.csdn.net/xs18952904/article/details/79262646
4、在服务器上更新全部过期的网站的ssl证书,在linux执行命令即可:certbot renew
posted on 2021-03-19 10:31 dong瓜(TreeSky) 阅读(566) 评论(0) 收藏 举报
浙公网安备 33010602011771号