您的位置:首页 > 运维架构 > Apache

如何在 Apache 上部署 Let's Encrypt 证书 &&自动续期脚本

2017-11-28 00:22 627 查看



姊妹篇:http://bbs.qcloud.com/thread-12059-1-1.html 

Linux基金会宣布它将托管Let's Encrypt项目和互联网安全研究组(ISRG)。Let’s Encrypt CA项目由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,向网站自动签发和管理免费证书,加速将Web从HTTP过渡到HTTPS。ISRG则是开发Let’s Encrypt CA的非营利组织。

今天我来教大家在Nginx上部署Let's Encrypt证书

下载Let's Encrypt客户端

    首先我们要安装git

apt-get update

apt-get -y install git

复制代码
然后,检出Let's Encrypt的客户端源码

git clone https://github.com/letsencrypt/letsencrypt
复制代码
这样,我们就成功的下载了Let's Encrypt的客户端

签发证书

进入目录

cd letsencrypt

复制代码
使用 Let's Encrypt的Apache插件生成证书即可

./letsencrypt-auto --apache -d example.com

复制代码
如果只签一个域名,按照上面的命令就可以了

他会自动安装插件,然后你需要输入邮箱来用于证书的找回。同时还会要求你选择是否同时开启Http和https和是否开启强制https。

可以参照http://bbs.qcloud.com/thread-12059-1-1.html

如果是多个域名,就用下面的命令生成

./letsencrypt-auto --apache -d example.com -d www.example.com

复制代码

#!/bin/bash

#================================================================

# Let's Encrypt renewal script for Apache on Ubuntu/Debian

# @author Erika Heidi<erika@do.co>

# 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

复制代码
将这个脚本加上可执行权限,再配置每个月或每两个月自动执行就可以保证你的证书不过期了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: