免费永久的HTTPS证书——Let's Encrypt来了!

1,257 阅读3分钟

什么是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安装方式的网站如下:

certbot.eff.org/instruction…

它的文档还是非常人性化的,选择好系统后,会自动展示对应系统的安装文档,这里我选的系统是: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证书的问题完美解决了!赶快去试试吧~