前言
2018年1月份Letsencrypt可以申请泛域名证书,这让我们部署多域名、多站点https省了很多功夫,终于可以不用维护多个域名的https证书。笔者以acme.sh为例,手把手教你配置https证书~
本教程适用于centos 6.x的linux服务器
acme.sh
acme.sh是国人开发的基于ACME协议的shell脚本,有了它可以很方便的从Letsencrypt生成免费的证书
详细步骤
一: 安装acme.sh
curl https://get.acme.sh | sh
执行上述命令后,会在/root
文件夹下建立一个.acme.sh
的目录,里面放置了一些运行需要的脚本;同时,会注册一个检验证书是否到期的crontab任务,当证书到期时会自动更新;另外,安装完重启终端后,可以在终端直接使用acme.sh别名进行操作
安装过程中可能会遇到curl errcode: 35的问题,这个时侯只需更新一下NSS(MNetwork Security Services 网络安全服务)即可,命令如下:
yum update nss
二:生成证书
acme.sh实现了 acme 协议支持的所有验证协议,一般有两种方式验证:http验证和dns验证
http验证
http方式需要在你的网站根目录放置一个文件验证所有权,验证通过后就可以生成证书了。笔者没有采用这种方式,具体操作可以 参考这篇wiki
dns验证
dns有验证有两种途径,一种是手动解析域名,然后生成一个解析记录,给域名配置上一个txt记录就可以验证了,具体操作也可以参考上面提到的wiki,笔者曾尝试使用这种方法,不知道是姿势不对还是别的什么原因,没有任何返回任何值
dns验证的另一种途径是通过域名解析商提供的api来自动添加txt记录完成验证,目前支持dnspod、aliyun等数种域名解析商,笔者以dnspod为例进行操作
首先登陆dnspod控制台,找到用户中心 - 安全设置,新建一个API TOKEN,新建完不要关闭窗口,一会还要复制里面的id和key,然后在终端中输入:
export DP_Id="id" # 你刚才生成的Id
export DP_Key="token" # 你刚才生成的token
acme.sh --issue --dns dns_dp -d *.gaojiajun.cn # dns_dp表示以dnspod解析,-d后面的为你的主域名
之后,你可以在/root/.acme.sh/你的域名
下面看到生成的证书
复制证书
不要将nginx配置文件里面的证书地址指向/root/.acme.sh/你的域名
,因为里面的文件夹结构可能会变。需要将证书复制到别的位置
acme.sh --installcert -d *.<domain> --key-file /home/ssl/*.<domain>.key --fullchain-file /home/ssl/fullchain.cer --reloadcmd "service nginx force-reload"
之后你就可以在/home/ssl/
下面找到两个文件
部署证书
修改nginx配置文件
server {
listen 80;
server_name i.gaojiajun.cn; # 你的域名
rewrite ^(.*) https://$server_name$1 permanent; # 重定向80端口到443端口
}
server {
server_name i.gaojiajun.cn; # 你的域名
listen 443 ssl;
ssl_certificate /home/ssl/fullchain.cer; #证书位置
ssl_certificate_key /home/ssl/*.gaojiajun.cn.key;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /home/nginx/; # index所在的位置
index index.html index.htm;
}
}
重启nginx之后,访问你的网站,当你看到小绿锁出现就大功告成了
如果重启后仍然无法访问,则可能是防火墙没有开放443端口,开放即可
iptables --list # 列出防火墙端口
/sbin/iptables -I INPUT -p tcp --dport 443 -j ACCEPT # 开放443端口
/etc/rc.d/init.d/iptables save # 保存