小蜗熊的蜂蜜罐
LAMP下使用Certbot自动配置SSL证书
发布于: 2018-03-01 更新于: 2020-03-21 分类于: 技术 > Linux 阅读次数: 

Let’s Encrypt是ISRG运营一个免费、开放,自动化的证书颁发机构,可以申请到期限90天的免费SSL证书(包括单域名、多域名和泛域名)。 Certbot是Let’s Encrypt官方提供的一款SSL自动安装程序,官方网站 。使用Certbot可以自动完成获取密钥、申请证书、安装证书等一系列繁琐的操作,也提供了自动证书续期的功能。使用Certbot自动配置SSL证书,也可以免去手动申请证书中添加TXT解析的步骤。

安装Certbot客户端

方法一 (Packages for Debian)

Ubuntu下可以直接用预编译好的安装包进行安装,步骤如下:

 sudo apt-get update
 sudo apt-get install software-properties-common  
 sudo add-apt-repository ppa:certbot/certbot  
 sudo apt-get update  
 sudo apt-get install python-certbot-apache

安装后可执行certbot来检验是否安装成功。

方法二 (Certbot-Auto)

如果源出现问题无法使用apt-get进行安装,或者是当前系统linux版本没有对应的certbot安装包时(如CentOS6等),可采用方法二。 CentOS6用此方法安装前还需要更新Python。

 git clone https://github.com/certbot/certbot.git
 chmod a+x certbot-auto

从GitHub获取Cerbot-Auto并赋予权限

./certbot-auto

自动安装当前环境下所需的依赖 如采用此方法安装,请把下文中的 certbot 全改成./certbot-auto

配置SSL证书

1. 停止Apache服务

sudo /etc/init.d/apache2 stop

2. 生成SSL证书

单证书对应单域名的情况下,可以使用:

sudo certbot –apache -d [your domain]

在单证书对应多个域名的情况下,可以在其后加上多个 -d [your domain] , 其中第一个一般为主域名。

sudo certbot –apache -d [your domain1] -d [your domain2] ···

运行时会有一个交互过程,根据提示输入邮箱地址并进行验证,这个邮箱可以用来恢复丢失的密钥和接收通知。 最后会有一个选项,选择同时开启http和https或者是全部重定向到https,建议全部重定向。

3. 启动Apache服务

 sudo /etc/init.d/apache2 start

Certbot自动更新

Let’s Encrypt颁发的证书期限只有90天,所以需要定期进行更新。
首先可以通过sudo certbot renew –dry-run命令进行验证,确保certbot可以进行证书更新。然后可以借助Cron使其自动执行更新任务。
Cron是一个定时执行工具,作用类似于windows下的计划任务,具体操作如下:
使用命令cron -l或直接编辑/etc/crontab文件

0 3 1 * * certbot renew --pre-hook "/etc/init.d/apache2 stop" --post-hook "/etc/init.d/apache2 start"

cron -l 后出现刚添加的内容,即为设置成功。

可能出现的问题

python虚拟环境问题

在低内存的VPS上运行certbot可能会出现依赖安装失败,可以通过杀死其他程序来释放内存,经测试可用内存在120m时运行失败,通过kill命令释放至500m可用时即可正常运行。
如果主机内存物理内存本身即小于512m,可采用创建临时交换文件的方法:

 sudo fallocate -l 1G /tmp/swapfile
 sudo chmod 600 /tmp/swapfile
 sudo mkswap /tmp/swapfile
 sudo swapon /tmp/swapfile

安装结束后用以下命令删除交换文件:

 sudo swapoff /tmp/swapfile
 sudo rm /tmp/swapfile

Chrome下无法显示小绿锁

Chrome下显示小绿锁需要页面内全部资源均为HTTPS资源,否则会显示“您与此网站之间建立的链接并非完全安全”。 如果添加完SSL证书后仍未显示绿锁,需要检查网页内的资源并将其改为HTTPS。包括对象储存服务、网页内图片以及外链图片。

--- 本文结束 The End ---