在 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 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

以太坊私链入门

中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

2.2K9
来自专栏杨建荣的学习笔记

EM agent无法启动的原因及分析 (r6笔记第75天)

昨天收到一条报警短信,短信内容大体如下: Agent is Unreachable(REASON=javax.net.ssl.SSLPeerUnverified...

3515
来自专栏哎_小羊

GitLab 之 Git LFS 大文件存储的配置

目录 Git LFS 介绍 环境、软件准备 Git LFS 安装 GitLab LFS 的配置 1、Git LFS 介绍 Git 大文件存储(Large F...

72010
来自专栏大魏分享(微信公众号:david-share)

Ansible Tower标准化管理案例

. 配置sudo 1. 修改文件权限 [root@localhost]# cat mod-sudo-1.yml --- - hosts: all ...

3669
来自专栏梦里茶室

java后台开发- NOTE

2015-1-6: IDEA servlet-api.jar    idea从14升级到15后,发现 import javax.servlet.AsyncCon...

1969
来自专栏散尽浮华

Linux下部署Samba服务环境的操作记录

关于Linux和Windows系统之间的文件传输,很多人选择使用FTP,相对较安全,但是有时还是会出现一些问题,比如上传文件时,文件名莫名出现乱码,文件大小改变...

3878
来自专栏沈唁志

在Windows10安装Docker遇到问题的解决方法

在 Windows 上安装Docker是一个相当简单和直接的过程,之前接触Docker是在 Centos 系统下,在 Windows 下并没有尝试过

7053
来自专栏Python

Flask-email 发送邮件的配置,发送附件的方法,以及os.environ.get('MAIL_USERNAME')为None的解决办法

2712
来自专栏codelang

Android的Nexus搭建Maven私有仓库

1342
来自专栏魏艾斯博客www.vpsss.net

如何设置免费网易企业邮箱

1936

扫码关注云+社区