Let's Encrypt免费SSL证书的出现,也会对传统提供付费SSL证书服务的商家有不小的打击。到目前为止,Let's Encrypt获得IdenTrust交叉签名,这就是说可以应用且支持包括FireFox、Chrome在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。
虽然目前Let's Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用。
第一、安装Let's Encrypt前的准备工作
在服务器上部署Let's Encrypt免费SSL证书之前,需要系统支持Python2.7以上版本以及支持GIT工具。
如果你的服务器没有自带Python或者版本过低,你需要进行安装或升级。
GIT安装:"apt-get -y install git"或者"yum -y install git-core
第二、快速获取Let's Encrypt免费SSL证书
获取证书和布局还是比较复杂的,Let's Encrypt肯定是考虑到推广HTTPS的普及型会让用户简单的获取和部署SSL证书,所以可以采用下面简单的一键部署获取证书。
git clone https://github.com/letsencrypt/letsencrypt #时间有点久 cd letsencrypt #进入目录
基本用法
./letsencrypt-auto certonly --standalone --email admin@form1.cn -d form1.cn -d www.form1.cn --standalone 用这个命令无需指定站点目录和提前解析 --email 最好是真实的,因为证书到期会收到邮件提醒 -d 域名
如果你想要生成泛域名的证书,使用以下命令:
./letsencrypt-auto certonly --webroot -d 'form1.cn,www.form1.cn' -w /datafile/form1/web -d '这里泛域名用逗号隔开' -w 需要指定域名访问的站点根目录,当然你得先把域名解析到改服务器
如果有你不同的域名解析到服务器,你可以执行多次该命令:
./letsencrypt-auto certonly --webroot -d 'newsite.com,www.newsite.com' -w /var/www/newsite/public
然后执行上面的脚本,我们需要根据自己的实际站点情况将域名更换成自己需要部署的。
我用的是nginx代理服务器
注意:如果nginx在启动的情况下,可能生成不了证书,请关闭nginx,在执行上方脚本。
执行脚本后会输一个紧急通知邮件,还会出现选项 (A)gree 或 (C)ancel ,填A、Y按Enter键即可
第三、Let's Encrypt免费SSL证书获取与应用
在完成Let's Encrypt证书的生成之后,我们会在"/etc/letsencrypt/live/form1.cn/"域名目录下有4个文件就是生成的密钥证书文件。
cert.pem - Apache服务器端证书 chain.pem - Apache根证书和中继证书 fullchain.pem - Nginx所需要ssl_certificate文件 privkey.pem - 安全证书KEY文件
我使用的Nginx环境,那就需要用到fullchain.pem和privkey.pem两个证书文件,文件路径最好不要移动。
ssl_certificate /etc/letsencrypt/live/form1.cn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/form1.cn/privkey.pem;
在Nginx环境中,只要将对应的ssl_certificate和ssl_certificate_key路径设置成我们生成的2个文件就可以,最好不要移动和复制文件,因为续期的时候直接续期生成的目录文件就可以,不需要再手工复制。
第四、解决Let's Encrypt免费SSL证书有效期问题
当我们在服务器上维护多个站点时,我们真的应该依赖某种方法自动更新我们的 Let's Encrypt 证书。没人愿意每三个月去手动更新一次。很幸运,Let's Encrypt 官方提供了一段代码来处理这个问题 ,而我们只需要创建一个计划任务,采用 cron 定时任务命令定期自动运行(这段代码) 。现在,我们创建一个文件 /etc/letsencrypt/auto_renew.sh。把下面的代码添加进来,你也可以自己做些修改,实现你想要的功能。
#!/bin/sh # This script renews all the Let's Encrypt certificates with a validity < 30 days if ! /opt/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then echo Automated renewal failed: cat /var/log/letsencrypt/renew.log exit 1 fi nginx -t && nginx -s reload
现在将以上的脚本添加到计划任务, 执行 sudo crontab -e 添加下面一行代码:
@daily /etc/letsencrypt/auto_renew.sh
第五、关于Let's Encrypt免费SSL证书总结
A - 域名DNS和解析问题。在配置Let's Encrypt免费SSL证书的时候域名一定要解析到当前VPS服务器,而且DNS必须用到海外域名DNS,如果用国内免费DNS可能会导致获取不到错误。
B - 安装Let's Encrypt部署之前需要服务器支持PYTHON2.7以及GIT环境,要不无法部署。
C - 需要关闭nginx代理服务器,执行生成证书命令才能生成证书成功。
D - Let's Encrypt默认是90天免费,需要手工或者自动续期才可以继续使用。
第六、一个nginx部署的例子,环境是lnmp
server { listen 80; server_name api.form1.cn admin.form1.cn; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 443 ssl; ssl_certificate /etc/letsencrypt/live/form1.cn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/form1.cn/privkey.pem; server_name api.form1.cn admin.form1.cn; location \ { if (!-e $request_filename) { rewrite ^/(.*)index.php(.*)$ $1/index.php?s=$2 last; rewrite ^(.*)$ /index.php?s=$1 last; break; } } root /datafile/form1; index index.html index.php; error_page 404 /404; access_log /var/log/nginx/www.log; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } include "vhost/conf.phpfix"; #php-代理设置 }
只有http设置
server { listen 80; server_name form1.com; root /datafile/form1/public; location / { if (!-e $request_filename) { rewrite ^/(.*)index.php(.*)$ $1/index.php?s=$2 last; rewrite ^(.*)$ /index.php?s=$1 last; break; } } index index.php index.html; error_page 404 /404; access_log /home/wwwlogs/form1.log; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } include "vhost/conf.phpfix"; }
php-代理设置
location ~ \.php { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; include fastcgi.conf; fastcgi_pass unix:/tmp/php-cgi.sock; }
参考地址1:https://www.cnblogs.com/jtnote/p/7155687.html
参考地址2:https://blog.csdn.net/hj7jay/article/details/55504176