SSL/TSL 证书是由受信任的数字证书颁发机构CA颁发给服务器的数字签名,目的是对传送的数据进行加密和隐藏,确保数据在传送中不被改变,从而保证数据传输的安全与完整。取得SSL/TSL证书之后,浏览网站将启用https协议传输数据。
自从某个时候使用chrome后,只要网站没有SSL证书就一直会提醒网站不安全。作为强迫症患者,实在看不下去只好动手给自己的网站添加SSL证书。
SSL证书的颁发很多需要付费,而且价格不菲,基于互联网分享精神,一些机构开始免费颁发证书,我就用了 Let’s Encrypt 的免费证书。本站VPS使用了基于Ubuntu搭建的LAMP环境, Let’s Encrypt 提供了Certbot 自动部署数字签名以及自动更新到期证书。
Certbot具体部署方法非常简单,只需要两步,具体如下:
注意:在开始使用Certbot之前,首先确保域名DNS A记录正确设施,否则Certbot部署证书时会报错。如果你使用了LNMP的环境,以下apache需要替换成nginx。
sudo apt install certbot python3-certbot-apache
待所有的模块安装完成后,输入以下命令:
sudo certbot --apache
之后将出现如下界面,这时候选择需要启用https的域名,比如我这里选择2号域名启用https。
之后Certbot将会自动执行部署,完成后会Certbot会要求用户确认是否自动重定向http到https,推荐选择自动定向2。
最后,如果你配置了ufw防火墙,并且在原有防火墙上禁用了443端口,网站将无法访问,因为https使用443端口通信,这时候需要重新配置ufw防火墙以允许443端口,配置方案如下:
sudo apt install ufw
sudo systemctl start ufw && sudo systemctl enable ufw
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
到此,SSL/TSL证书就配置完毕,可以开心的使用https访问网站了。
对于VPS上挂载了多个网站的情况,可以使用一张证书,因为一个证书上可以绑定多个网站域名,这样使用一个SSL 够了。如果需要部署多个SSL则需要用端口号区分访问,因为HTTPS 用的是443 端口,每个服务器上都是只有一个443 端口,一张证书已经把443 端口占用了,则需要启用另一个端口来访问另一个证书的网站,比如通过https://www.zhangpeng.info:445 这种域名+端口号方式访问,这样做似乎得不偿失。
更高级的全面的教程可以参考: User Guide — Certbot 2.3.0 documentation (eff-certbot.readthedocs.io)