共计 2690 个字符,预计需要花费 7 分钟才能阅读完成。
最近公司网站要用 https,从自己摸索到找到国内的免费证书到选购正式的收费证书,最后老板说:太贵!不要。一脸懵逼的听老板提到 Let’s Encrypt 证书,没办法,用呗。之前是有一些了解,国外发布的一款纯免费证书,只是觉得天下没有免费的午餐,免费和收费的差距肯定还是有的。于是,硬着头皮开始鼓捣 Let’s Encrypt 证书。
前言
Let’s Encrypt 作为新的证书颁发机构,免费,自动,开放,这三点对于个人用户来说尤为重要。免费自不用说,自动更是免去了很多过程和麻烦。官网目前推荐的获取和安装方式是 certbot,只需要简单运行一些命令并作一些配置即可。
前提
1. 需要有域名,它会生成指定域名的证书。(填 IP 会报错不支持的)
1. 需要在域名指向的服务器上能访问 https。(不然会报找不到 443 端口的错误)
2. 需要 linux 环境。
部署
获取 Let’s Encrypt
## 获取
wget https://dl.eff.org/certbot-auto
## 设置为可执行
chmod a+x certbot-auto
执行自动部署
./certbot-auto
部署过程中会下载一大堆的依赖包,不需要紧张。如果需要确认,(输入 ”y”)确认就好了
这里注意下,在执行过程中,会卡在 ’Installing Python packages’,等待一段时间下载 Phthon lib
如果等待很长时间都不动, 等不及了就修改 pip 下载源。vi ~/.pip/pip.conf
#如果文件不存在则创建
mkdir ~/.pip
vi pip.conf
在里面修改或写入下面内容
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
重新执行自动部署
./certbot-auto
重新部署依然会在 'Installing Python packages' 卡一会儿,但不会很久,五分钟以内吧。
依赖包下载完后会进入交互界面,依次是:填写邮箱、域名(多域名用空格或逗号隔开)、条款确认、验证域名所有权(这一步可以选择第一种方式,手动选择 tomcat 的 root 目录)
执行成功后会显示
Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/xxx.com/fullchain.pem. Your cert will
expire on 2016-10-05. To obtain a new or tweaked version of this
certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
“certbot-auto renew”
此时的生成的证书文件 (.pem) 都已经在如下路径了
/etc/letsencrypt/
# 主要用到的文件 (.pem) 在
/etc/letsencrypt/live/xxxxx(域名)/
自动续期
Let’s Encrypt 申请的证书会有三个月的有效期,可以到期前手动续约,也可以自己写定时脚本任务自动续约。嫌手动麻烦,就写了个简单的续期脚本。
1、脚本
#/bin/sh
#续期 说明:只用 renew 的话,会先检查证书是否需要更新,大概是距离到期还有三天或者十几天之内才会执行更新,否则会提示不需要更新。(昨天更新了证书,今天直接用 renew,提示不允许更新)#这里方便测试,增加参数--force-renew,能够强制立即更新(但好像也会有检查,时间会变短,比如我刚才更新过了,马上再次执行会报错并提示不需要更新)。./certbot-auto renew --force-renew
#生成 p12
cd /mnt/web/letsTemp && openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out fullchain_and_key.p12 -name tomcat -passin passyourPKCS12pass -passout pass:yourPKCS12pass
#移动新生成的证书文件
cp /etc/letsencrypt/live/yourDomain/fullchain.pem /mnt/web/letsTemp
cp /etc/letsencrypt/live/yourDomain/privkey.pem /mnt/web/letsTemp
#生成 jks 文件
#备份并删除原 jks 文件
mv /mnt/web/letsTemp/MyDSKeyStore.jks /mnt/web/letsTemp/MyDSKeyStore`date '+%Y-%m-%d'`.jks
cd /mnt/web/letsTemp && keytool -importkeystore -deststorepass yourKeyPass -destkeypass yourKeyPass -destkeystore MyDSKeyStore.jks -srckeystore fullchain_and_key.p12 -srcstoretype PKCS12 -srcstorepass yourPKCS12pass -alias tomcat
#重启服务器
/mnt/web/tomcat/tomcat8/bin/restartup.sh
2、定时任务
脚本有了,还需要在 linux 中添加一个定期执行脚本的任务,这里用 linux 自带的 cron 来处理这部分。
crontab -e
在打开的编辑器中添加如下内容(每个月 1 号凌晨 3 点更新)
0 0 3 * * sh /mnt/web/lets/ssl_auto_auth.sh >/dev/null 2>&1 &
使用 Let’s Encrypt 手动创建 https 证书 http://www.linuxidc.com/Linux/2016-06/132138.htm
Windows 申请免费 SSL 证书-Let’s Encrypt http://www.linuxidc.com/Linux/2017-01/139465.htm
Certbot:自动部署 Let’s Encrypt 证书 http://www.linuxidc.com/Linux/2016-05/131346.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142248.htm
正文完
星哥玩云-微信公众号