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。包括对象储存服务、网页内图片以及外链图片。