手把手教你使用Let's Encrypt免费上https

171 阅读3分钟

阅读官网文档

Let's Encrypt入门指南提供两种方式获取https证书,两种方式根据我们对服务器的访问权限来区分,一种是具有命令行访问权限,另一种是没有命令行访问权限的方式,大多数情况下我们都具有命令行访问权限,因此本文章主要详细讲解命令行访问权限的方式;如下图:

安装Certbot

Certbot官网就直接是使用教程,只是没有中文版本,进入之后展示的内容如下: 让我们选择我们我们web应用运行的环境,我是在CentOS系统上,使用Nginx管理我的站点,下面详细说明使用Nginx管理的站点如何上https,Centos Nginx环境官方使用教程

  1. ssh登录你的服务器,同时你需要有该服务器的超管权限
  2. 安装snapd
  1. 阅读snap官方安装教程,官方教程只有英文版,没有中文版本;进入之后需要让你选择你的系统来确定具体的安装教程(我的系统是CentOS,因此选择CentOS),详情如下:
  2. 阅读CentOS上安装sanp官方文档,官方文档简单介绍了snap可以运行的系统,同时说明了snap在EPEL(简单认为是官方软件库的扩展就行,官方维护的软件有限,因此要安装非官方的软件需要额外添加源),如果不了解EPEL,感兴趣的可以自行科普一下。这里不需要了解EPEL,如果你没有安装过EPEL那一定需要安装EPEL才行,官方文档也给出了各系统版本(查看系统版本,可以使用hostnamectl命令)EPEL的安装方式,如下图:
  3. 假设你已经添加了EPEL,接下来安装snapd,使用命令sudo yum install snapd安装snapd
  4. 将主snapd通信套接字设置为开机启动:sudo systemctl enable --now snapd.socket
  5. 开启classic snap支持:sudo ln -s /var/lib/snapd/snap /snap
  1. 安装snap core:sudo snap install core; sudo snap refresh core,后面那一条命令是更新core,通常安装完core之后core已经是最新的,后面这条命令可能不会按照预期工作,如提示「snap "core" has no updates available」
  2. 再继续接下来的操作之前,请确认Certbot没有使用系统的包管理工具安装过,如果有安装过轻先移除它;这里是不同包管理工具移除Certbot的方式,sudo apt-get remove certbotsudo dnf remove certbotsudo yum remove certbot;请确保certbot命令是通过snap安装的
  3. 安装Certbot:sudo snap install --classic certbot
  4. 使certbot命令生效:sudo ln -s /snap/bin/certbot /usr/bin/certbot

选择安装证书的方式

  • 申请证书的同时自动修改nginx配置文件,使其工作:sudo certbot --nginx
  • 仅申请证书,需要自己手动修改配置文件:sudo certbot certonly --nginx,在对应的nginx配置文件位置添加以下配置:
server {
  # 你站点的配置

  listen [::]:443 ssl ipv6only=on;
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/isqqy.cn/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/isqqy.cn/privkey.pem;
  include /etc/letsencrypt/options-ssl-nginx.conf;
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

server {
    if ($host = site_domain_name) {
        return 301 https://$host$request_uri;
    } # 如果有多个域名,添加多个if就行,同时site_domain_name也要对应改为列表

    listen 80;
    listen [::]:80;
    server_name site_domain_name; # 这里site_domain_name改为需要上https的域名
    return 404; 
}

其实第一种方式就是自动将这些配置添加到nginx配置文件,想偷懒的话推荐使用第一种方式,最终效果如下:
添加好配置之后,访问一下你配置的域名,是否强制走https了,如果强制走https了,那么恭喜你你已经成功了。
默认情况下,Let's Encrypt申请的证书只有三个月有效期,但是幸运的是,使用Certbot申请的证书会自动进行续订。