Let's Encrypt是一款永久免费的SSL证书,可以完全用于很多想要网站支持HTTPS又不想浪费金钱的站长们,并且Let's Encrypt还支持“*”通配符域名,也就是我们所说的支持泛解析HTTPS了。
Let's Encrypt 是一个免费、开放,自动化的证书颁发机构,由 ISRG(Internet Security Research Group)运作。ISRG 是一个关注网络安全的公益组织,其赞助商包括 Mozilla、Akamai、Cisco、EFF、Chrome、IdenTrust、Facebook等公司。ISRG 的目的是消除资金和技术领域的障碍,全面推进网站从HTTP到HTTPS过度的进程。目前,包括FireFox、Chrome在内的主流浏览器都已经支持Let's Encrypt证书。
我的服务器环境是Linux(Centos6.5 64位)+Nginx+PHP+Mysql;其它操作系统也可以用此教程的,毕竟很多都是相通的。具体操作如下:
一、申请、安装、配置证书
这里其实建议大家先去官网:https://certbot.eff.org 看一下,毕竟官网简单多了!我这里是因为我的服务器用不了官网上所说的方法。
1、下载“letsencrypt-auto”脚本
从项目地址先下载“letsencrypt-auto”脚本,地址也很多,这里以github为主:
# 选择下载路径,我这里下载在/tmp目录下
$ cd /tmp
# 下载
$ git clone https://github.com/letsencrypt/letsencrypt
# 进入所在目录
$ cd letsencrypt
# letsencrypt-auto 帮助查看
$ ./letsencrypt-auto --help
或者
# 选择下载路径,我这里下载在/tmp目录下
$ cd /tmp
# 下载
$ wget https://github.com/certbot/certbot/archive/master.zip
#解压
$ unzip master.zip
# 重命名
$ mv certbot-master/ certbot
# 进入所在目录
$ cd cerbot
# letsencrypt-auto 帮助查看
$ ./letsencrypt-auto --help
或者
wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto
2、创建、获取证书
$ certbot-auto certonly --webroot -w /home/wwwroot/huichengffwp/wordpress -d www.huichengff.com -d huichengff.com
如果一直出现了“Creating virtual environment...“和”Installing Python packages...”不走了,卡在这里。具体请查看:https://www.fujieace.com/jingyan/installing-python-packages.html
最终得到结果:
证书存放路径:/etc/letsencrypt/live/www.domain.com/
fullchain.pem:包含服务器证书的全部证书链文件
privkey.pem:服务器证书对应的私钥
cert.pem:申请的服务器证书文件
chain.pem:除服务器证书外,浏览器解析所需的其他全部证书,比如根证书和中间证书
二、Nginx配置
我们需要让Nginx开启443端口来支持SSL,nginx 443端口区域配置如下:
server {
listen 443 ssl;
server_name huichengff.com,www.huichengff.com;
ssl_certificate /etc/letsencrypt/live/www.huichengff.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.huichengff.com/privkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
......
}
还需要做一个301跳转,让http跳转到https,nginx 80端口区域配置如下:
server {
listen 80;
server_name huichengff.com,www.huichengff.com;
return 301 https://$server_name$request_uri;
......;
}
重启Nginx,现在网站已经可以成功访问HTTPS了,我们的SSL证书就已经做好了。
三、证书续期
由于Let's Encrypt的SSL证书免费只支持90天,也就是三个月,三个月到期后必须要重新续约,否则SSL证书就失效了。续期官网也讲得很明白了,就两种方法:
1、要到期的时候,手工执行命令:
/usr/local/bin/certbot-auto renew
2、crontab定时任务自动续期:
我们建议每天运行两次(在您的证书需要续订或撤销之前,它不会执行任何操作,但定期运行会使您的站点有机会保持在线状态,案例a由于某种原因,我们发生了加密启动的撤销。请在一小时内为您的续订任务选择一个随机分钟。
0 0,12 * * * python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew