什么是HTTPS?
首先让我们来简单了解下https。
HTTPS是身披SSL外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。
TIP: TLS 是传输层加密协议,它的前身是 SSL 协议。我们知道HTTP协议是基于TCP的。简而言之HTTPS就是在TCP的基础上套一层TLS协议,对HTTP原来在TCP明文传输的内容进行加密,达到安全的目的。
可以看到HTTPS对于网站来说无疑是更安全的。
云服务器配置HTTPS证书的烦恼
之前我是在阿里云上配置的HTTPS证书:
这种配置方式其实很麻烦,需要手动在阿里云网站上生成https证书,然后将证书上传到服务器上,再到服务器上重启nginx。这个操作在每次证书过期前都需要操作一次,不过好在之前阿里云下发的免费证书有效期是1年,我每年配置一次就行,还算可以接受。但是近期阿里云调整了免费证书的下发策略,有效期缩短至3个月,这就让人不胜其扰了。所以就研究了一下有没有更好的免费TTPS证书配置方式,发现果然有,它就是——Let's Encrypt。
什么是Let's Encrypt
Let’s Encrypt是一个非盈利的,免费的CA,可以提供免费HTTPS认证服务。 提供了一套完整的工具,基于这套工具,我们可以免费来搭建HTTPS网站。 详情可参见它的官网:letsencrypt.org/
为什么使用Let’s Encrypt
国内有许多机构可以提供免费的SSL证书,但是一般只有一年的免费服务。Let’s Encrypt可以基于cron可以实现定时更新证书,从而实现永久免费的目的。
如何使用Let's Encrypt配置HTTPS证书
查阅Let’s Encrypt官网可以发现我们应该安装Certbot工具来配置HTTPS证书。
介绍certbot安装方式的网站如下:
它的文档还是非常人性化的,选择好系统后,会自动展示对应系统的安装文档,这里我选的系统是:Nginx + CentOS 8
展示的安装文档如下:
参考这个文档并查阅一些网上资料,我实践后的得出安装步骤如下:
安装snapd
Snaps 应用程序(snaps) 是使用 snap 软件包分发系统捆绑的应用程序;它是由 canonical(开发 ubuntu Linux 发行版的公司)开发的。它已成为一些流行的桌面应用程序在 ubuntu 上安装的主要方式。许多其他 Linux 发行版现在也支持 snap 包。snapd 是 Snaps 软件包的管理工具。
sudo yum install snapd
sudo systemctl enable --now snapd.socket
sudo ln -s /var/lib/snapd/snap /snap
使用snapd安装certbot
snap install --classic certbot
ln -s /snap/bin/certbot /usr/bin/certbot
使用certbot生成证书
sudo certbot certonly --nginx
生成成功后命令行会显示证书文件在:
/etc/letsencrypt/live/www.readingblog.cn/fullchain.pem;
/etc/letsencrypt/live/www.readingblog.cn/privkey.pem;
配置nginx
将证书文件配置到nginx中并执行nginx -s reload重启nginx即完成了HTTPS配置
# HTTPS server
#
server {
listen 443 ssl;
server_name localhost;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
ssl_certificate /etc/letsencrypt/live/www.readingblog.cn/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.readingblog.cn/privkey.pem;
访问网站就可以看到效果啦:
可以看到证书是Let's Encrypt颁发的,有效期是90天。
配置定时任务自动更新证书
为了尽量确保证书不失效,我们配置一下定时任务即可:每天2点更新证书并重启nginx。
[root@iZ8vb55rs42xic2s53uc3yZ ~]# crontab -l
0 2 * * * sudo certbot renew && /usr/local/nginx/sbin/nginx -s reload
配置免费永久HTTPS证书的问题完美解决了!赶快去试试吧~