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

相关文章

来自专栏信安之路

webshell 常见 Bypass waf 技巧总结

对于很多,和我一样刚刚入门,或者还在门边徘徊的小伙伴们,在渗透学习的过程中,总会遇到各种情况,例如 php 大马被 waf 拦截的时候,那么如何制作免杀 php...

3210
来自专栏有趣的django

Django REST framework+Vue 打造生鲜超市(六) 七、用户登录与手机注册

七、用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest...

1.6K8
来自专栏Youngxj

免费申请泛域名ssl全过程-要弄仔细(否则会拦截)

2445
来自专栏云知识学习

​TKE容器服务搭建kubernetes-dashboard教程

目前TKE控制台暂时不支持Job, Pod, CronJob等对象的展示。有通过web界面查看这些类型对象的需求的话,可以自行安装k8s dashboard U...

1810
来自专栏腾讯云API

PyQt5开发入门(PyQt5安装与Pycharm配置)

为了给大家更多灵感,我录制了一套云API构建自己翻译系统的视频。在视频中,涉及到了GUI相关的内容,所以在这里给大家写了一个pyqt5开发和配置的一个简单的小流...

2089
来自专栏黑客秘密

黑客是如何实施暴力破解的?

“没有网络安全,就没有国家安全”,网络安全已经成为了国家战略级目标,如果做过开发的工程师也可能遇到过网站或者服务器被暴力破解的情况。下面我们就来看看,黑客是如何...

2807
来自专栏bdcn

CoreOS配置Docker API TLS认证 顶

我们经常会利用Portainer来管理docker环境,也经常会用Jenkins来自动构建和部署docker,远程管理都会使用到Docker API,通常我们只...

1502
来自专栏互联网技术栈

系统安全-JWT(JSON Web Tokens)

系统开发来讲,安全验证永远是最重要的,从最原始的session、cookie验证方式,到符合restful风格、满足前后端分离需求、启用https请求,各方面都...

1386
来自专栏散尽浮华

Nginx反向代理+负载均衡简单实现(https方式)

背景: A服务器(192.168.1.8)作为nginx代理服务器 B服务器(192.168.1.150)作为后端真实服务器 现在需要访问https://tes...

5098
来自专栏沈唁志

TP框架集成微信小程序getPhoneNumber获取手机号功能

4462

扫码关注云+社区