自动申请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/里 -
配置好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/ssl/www.xxxx.com/Nginx/www.xxxx.com.pem; # 指定证书的位置,绝对路径
ssl_certificate_key /etc/ssl/www.xxxx.com/Nginx/www.xxxx.com.key; # 绝对路径,同上
ssl_session_timeout 5m;
注意事项:
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.xxxx.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