你必须穷尽一生磨练技能,这就是成功的秘诀,也是让人家敬重的关键。

在 Apache 上部署 Let’s Encrypt 证书与自动续期脚本

其他技术 练习 1351浏览 0评论

https实战,在 Apache 上部署 Let’s Encrypt 证书与自动续期脚本
作为一只菜鸟,对别人都已经掌握而自己却没有实践过的东西总是心痒难耐,这次我决定把个人博客迁到https,没有任何理由,纯是为了练手和学习。
Let’s Encrypt证书是免费的而且90天有效期这些事情就不必多说了。
首先你要有自己的云主机或者服务器,虚拟空间的话就放弃吧。我是购买的腾讯云,毕竟是自己家的产品。然后我的系统是CentOS 6.5 64位,没有安装7,对于7的配置我还需要花点时间去了解。
Let’s Encrypt的客户端源码我是通过git clone到服务器的,如果你还没有安装git……


yum install git-core

建议你装上,会方便很多,部署个代码什么的。
然后就是

git clone https://github.com/letsencrypt/letsencrypt.git

clone完成之后进入到letsencrypt的目录,现在开始生成证书

./letsencrypt-auto –apache -d 你的域名

这样就签了一个域名,如果你要签多个域名,可以这么写

./letsencrypt-auto –apache -d 你的域名 -d 你的域名

比如我的

./letsencrypt-auto –apache -d chengrang.com -d www.chengrang.com

如果要强制把http跳转到https,那么在你的httpd.conf里加上
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]

ok,现在我们重启apache。

可以看到你的域名是这样的啦

https

最后附送一个自动更新证书的脚本

#!/bin/bash
#================================================================
# Let’s Encrypt renewal script for Apache on Ubuntu/Debian
# @author Erika Heidi
# Usage: ./le-renew.sh [base-domain-name]
#================================================================
domain=$1
le_path=’/opt/letsencrypt’
le_conf=’/etc/letsencrypt’
exp_limit=30;

get_domain_list(){
certdomain=$1
config_file=”$le_conf/renewal/$certdomain.conf”

if [ ! -f $config_file ] ; then
echo “[ERROR] The config file for the certificate $certdomain was not found.”
exit 1;
fi

domains=$(grep –only-matching –perl-regex “(?<=domains = ).*" "${config_file}") last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}') if [ "${last_char}" = "," ]; then domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}') fi echo $domains; } if [ -z "$domain" ] ; then echo "[ERROR] you must provide the domain name for the certificate renewal." exit 1; fi cert_file="/etc/letsencrypt/live/$domain/fullchain.pem" if [ ! -f $cert_file ]; then echo "[ERROR] certificate file not found for domain $domain." exit 1; fi exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s) datenow=$(date -d "now" +%s) days_exp=$(echo ( $exp - $datenow ) / 86400 |bc) echo "Checking expiration date for $domain..." if [ "$days_exp" -gt "$exp_limit" ] ; then echo "The certificate is up to date, no need for renewal ($days_exp days left)." exit 0; else echo "The certificate for $domain is about to expire soon. Starting renewal request..." domain_list=$( get_domain_list $domain ) "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}" echo "Restarting Apache..." /usr/sbin/service apache2 reload echo "Renewal process finished for domain $domain" exit 0; fi

转载请注明:练小习的前端技术笔记 » 在 Apache 上部署 Let’s Encrypt 证书与自动续期脚本

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址