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

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

  1. yum install git-core

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

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

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

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

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

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

比如我的

  1. ./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。

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

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

  1. #!/bin/bash
  2. #================================================================
  3. # Let's Encrypt renewal script for Apache on Ubuntu/Debian
  4. # @author Erika Heidi<erika@do.co>
  5. # Usage: ./le-renew.sh [base-domain-name]
  6. #================================================================
  7. domain=$1
  8. le_path='/opt/letsencrypt'
  9. le_conf='/etc/letsencrypt'
  10. exp_limit=30;
  11. get_domain_list(){
  12. certdomain=$1
  13. config_file="$le_conf/renewal/$certdomain.conf"
  14. if [ ! -f $config_file ] ; then
  15. echo "[ERROR] The config file for the certificate $certdomain was not found."
  16. exit 1;
  17. fi
  18. domains=$(grep --only-matching --perl-regex "(?<=domains = ).*" "${config_file}")
  19. last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')
  20. if [ "${last_char}" = "," ]; then
  21. domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
  22. fi
  23. echo $domains;
  24. }
  25. if [ -z "$domain" ] ; then
  26. echo "[ERROR] you must provide the domain name for the certificate renewal."
  27. exit 1;
  28. fi
  29. cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"
  30. if [ ! -f $cert_file ]; then
  31. echo "[ERROR] certificate file not found for domain $domain."
  32. exit 1;
  33. fi
  34. exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
  35. datenow=$(date -d "now" +%s)
  36. days_exp=$(echo ( $exp - $datenow ) / 86400 |bc)
  37. echo "Checking expiration date for $domain..."
  38. if [ "$days_exp" -gt "$exp_limit" ] ; then
  39. echo "The certificate is up to date, no need for renewal ($days_exp days left)."
  40. exit 0;
  41. else
  42. echo "The certificate for $domain is about to expire soon. Starting renewal request..."
  43. domain_list=$( get_domain_list $domain )
  44. "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
  45. echo "Restarting Apache..."
  46. /usr/sbin/service apache2 reload
  47. echo "Renewal process finished for domain $domain"
  48. exit 0;
  49. fi

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

My Vim

noip考完啦 不管成绩怎么样,以后不用Dev啦。 尝试一下传说中的Vim 我的Vim配置 Vim8.0 https://files.cnblogs.com/f...

4077
来自专栏BestSDK

iOS之Travis CI自动分发到蒲公英、fir

image.png 懒是程序员的美德,作为程序员应该善用工具提高自己的工作效率。在我最早的时候,我是个“勤奋”的人,写好代码后,如果要给测试同学测试我的App,...

23610
来自专栏开源优测

python selenium2示例 - SSL处理

前言 随着现在站点对安全的要求越来越高,越来越多的企业网站接入了https,随着https的大规模应用,我们在使用python selenium2进行自动化测试...

2986
来自专栏生信技能树

Anaconda is a snake.

conda这个东西,非常多人给我推荐过,即使是像我这样安装过上千款生物信息学软件的高手有时候也很痛苦各个软件的依赖关系,如果有省事的,我也比较乐意迁移我的习惯,...

1235
来自专栏编程之旅

使用Vundle管理Vim插件

编辑器流派的划分在程序员群体中一直存在着,而我也在尝试了SublimeText、VSCode和Atom这些代表着现代时尚功能的编辑器之后试着使用Vim,其实说到...

773
来自专栏技术专栏

SpringBoot+IDEA 热部署

882
来自专栏美丽应用

Apktool:手机端反编译利器(5.0+可用版)

1052
来自专栏前端架构

小米路由端口映射不成功!花生壳动态域名解释失败

962
来自专栏静晴轩

Npm vs Yarn 之备忘详单

有则笑话,如此讲到:“老丈人爱吃核桃,昨天买了二斤陪妻子送去,老丈人年轻时练过武,用手一拍核桃就碎了,笑着对我说:你还用锤子,你看我用手就成。我嘴一抽,来了句:...

3243
来自专栏石瞳禅的互联网实验室

Mac下也能用抓包工具Fiddler

一直以来都是在Windows底下工作,对于抓包工具,自然而然当属Fiddler最最出色。不过Fiddler是在.Net runtime环境下运行的,所以想要在M...

281

扫码关注云+社区