我们申请和使用Let’s Encrypt的免费HTTPS证书, 就需要一个证书申请和管理的工具, 然后certbot是官方推荐的申请工具, 我们使用这个工具申请和管理我们的证书
certbot支持大部分的linux发行版, 使用简单, 我们直接下载和安装他们:
我这里的系统是centos 7, 如果是ubuntu或者其他发行版安装方式应该都是差不多的, 我使用官方包直接快速安装
关于HTTPS是什么,这里不再进行解释
Let’s Encrypt是什么可以点击这里
yum -y install certbot
# certbot --version
certbot 1.11.0
安装好管理工具之后, 我们需要申请证书下来, 这里我的web服务器是nginx, 并且我没有网站的静态目录, 所以我使用这个命令申请:
certbot certonly --standalone certbot certonly --standalone -d example.com -d www.example.com -d m.example.com(需要申请证书的域名)
注:-d指定多个域名,则是为多个域名申请SSL证书
如果你的网站有静态目录的话, 可以把–standalone改成–webroot并且加上-w参数申请, 类似这样:
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com
在你使用–standalone申请证书的时候需要关闭nginx, 因为certbot会启用443端口校验你的域名信息, 如果nginx没有关闭, 会导致端口占用, 所以我们关闭nginx, 我这里是使用ubuntu, 所以使用这个命令关闭nginx:
nginx -s stop
申请证书完成之后证书会存在于/etc/letsencrypt/live/目录, 我们查看一下没有问题后打开nginx的配置文件修改证书载入路径:
server{
listen 80;
server_name www.example.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name www.example.com;
charset utf-8;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
#ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_ciphers AES256+EECDH:AES256+EDH:AES256-SHA:HIGH:!ADH:!EXPORT56:+MEDIUM:!MD5;
ssl_session_timeout 30m;
location / {
add_header 'Access-Control-Allow-Origin' '*'; #允许来自所有的访问地址
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, PUT, POST, DELETE, OPTIONS'; #支持请求方式
add_header 'Access-Control-Allow-Headers' 'Content-Type,*';
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
return 204;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_redirect off;
proxy_pass http://127.0.0.1:8080/;
}
access_log /opt/logs/nginx/www.example.com.log main;
}
保存退出之后, 检查nginx配置文件是否正确
nginx -t
没有问题的话, reload一下加载nginx配置
nginx -s reload
启动nginx
nginx
启动成功之后可以输入网址访问一下, 证书启用是否成功: https://www.example.com 如果显示证书正常表示成功
因为 Let’s Encrypt证书的有效期只有90天, 到期的时候我们需要刷新证书的有效期, 才可以继续使用, 刷新证书有效期, 因为我们使用的是–standalone模式安装nginx的证书, 所以刷新证书的时候还是需要关闭nginx, 使用这个命令关闭nginx:
nginx -s stop
然后运行这个命令刷新:
certbot renew --dry-run
或者我们使用系统的定时器, 再时间快要结束的时候, 刷新就行, Let’s Encrypt证书官方说证书截止时间要小于一个月的时候才可以刷新, 我们可以配置每两个多月的时候刷新时间就可以啦, 这里我们编写一个cron计划, 每两个月的凌晨 5:20 执行 更新操作
添加定时任务
# crontab -e
20 5 * */2 * root certbot renew --pre-hook "nginx -s stop" --post-hook "nginx"
查看定时任务
# crontab -l
#更新nginx的ssl证书
20 5 * */2 * root certbot renew --pre-hook "nginx -s stop" --post-hook "nginx"
至此,我们的证书申请就结束啦!