今天,如果你要运营一个网站,那HTTPS已经是必不可少的了. 现在,如果仍然使用HTTP,会面临一些障碍,包括但不限于:
部分浏览器会将HTTP视为不安全的,给以警示甚至是阻止
移动开发中(苹果)已默认禁止HTTP请求
HTTP网站容易被劫持并植入广告,非常影响体验
因而,给你的网站加上HTTPS是非常有必要的. 我个人的网站,都一律只支持HTTPS
但是一直以来,影响HTTPS普及的最大问题主要是HTTPS证书需要付费. 如果你知道有完全免费的HTTPS的证书,会不会更积极的使用HTTP?
今天我就简单讲下如何申请免费的HTTPS证书
1. 免费?
是的,有一些商业组织及非赢利组织允许申请免费的HTTPS证书.最著名的包括:
Let's Encrypt: 非赢利组织,目的就是为了普及HTTPS
ZeroSSL: 一个提供HTTPS证书服务的商业组织,其提供的服务中包含免费版本
并且,上述涉及到的无论是Let's Encrypt还是ZeroSSL,都支持通配符HTTPS证书申请, 比如我以 *.lpv4.cn
来申请,这样一个证书适合任意二级域名,非常方便实用.
因而,如果不是对HTTPS证书级别要求非常高的需求,比如支付或其它,针对个人网站在内的大部分完全可以考虑申请这样的HTTPS免费证书
当然免费的HTTPS有一些限制, 上述免费HTTPS限制主要是每次申请的证书的有效期只有90天(可无限续期),不过这个问题容易解决,很多开源的工具都支持自动续期。
2. 如何申请
当然,上述所说的无论是 Let's Encrypt
还是 ZeroSSL
免费证书,你都可以访问其官网,按照它的文档步骤进行申请.
不过按照官网的做法,申请下来并不是非常方便和简单
好在,互联网上永远有优秀的人提供优秀的工具与服务, acme.sh
就是这么一个工具.它是专门简化申请免费HTTPS证书的.
acme.sh
的特点是:
简化申请流程,在SHELL上就直接完成申请
支持包括Let's Encrypt以及ZeroSSL等多个HTTPS提供商
支持以DNS API以及Nginx或Standalone等不同方式来申请
支持自动续期 (基于Linux的crontab机制)
因此,使用 acme.sh
是最方便的申请HTTPS证书的方式之一.
3. 申请步骤
接下来详细的阐述下如何申请免费的HTTPS证书
前提
你需要有一个注册及购买一个能自己管理的域名,同时能SHELL到服务器上(因为acme.sh是以shell方式申请)
1. 安装acme.sh
执行以下命令 wget -O - https://get.acme.sh | sh -s email=idc@mail.qqdns.top
email改为你自己的邮箱
2. 申请DNSPOD或Cloudfalre的API KEY
acme.sh支持非常多的申请方式,这篇文章中,我选择DNS API的方式,我个人认为它最简单
因为是使用DNS API的方式,所以我们要申请DNS服务提供的API KEY,这里我以国内最著名的DNSPOD以及国外的Cloudflare来简单说明下
DNSPOD申请API KEY*
进入DNSPOD管理控制台
个人头像 -- API密钥 --DNSPod Token
新建密钥
export DP_Id="******"export DP_Key="******"
Cloudflare申请API KEY
进入Cloudflare管理后台
进入My Profile -- API TOKENS
新建Global Key
export CF_Key="******"export CF_Email="idc@mail.qqdns.top"
其它DNS服务提供商到acme.sh文档上查阅,步骤大都非常类似
3. 切换HTTPS证书提供商
如前所述, acme.sh支持多个不同的HTTPS服务提供商,包括Let's Encrypt以及ZeroSSL, 它默认使用的是ZeroSSL
我更喜欢Let's Encrypt,它是一个非赢利组织,纯粹为普及HTTPS,而且它的证书更普遍及通用
# 用这个命令来切换HTTPS证书提供商~/.acme.sh/acme.sh --set-default-ca --server letsencrypt# 切换到zerossl~/.acme.sh/acme.sh --set-default-ca --server zerossl
4. 申请HTTPS证书
申请了DNS服务商的相关KEY并export之后,就可以直接通过acme来申请相关的HTTPS证书了
# 注意不同DNS商的 --dns 值不同,不能搞混
# 如果是Cloudflare申请
~/.acme.sh/acme.sh --issue --dns dns_cf -d lpv4.cn -d *.lpv4.cn
# 如果是DNDPOD申请
~/.acme.sh/acme.sh --issue --dns dns_dp -d lpv4.cn -d *.lpv4.cn
稍微解释下这个命令
--dns dns_dp
: 以dns的方式,并且指定使用DnsPod来进行申请-lpv4.cn
: 指定申请的域名,同一个证书可以指定多个,*.lpv4.cn
是通配符方式,指定此网站下的所有二级域名
一切顺利的情况下,最后会输出生成的证书的相关信息
[Mon 30 Jan 2023 01:09:22 PM HKT] Your cert is in: /home/lingen/.acme.sh/lpv4.cn_ecc/lpv4.cn.cer [Mon 30 Jan 2023 01:09:22 PM HKT] Your cert key is in: /home/lingen/.acme.sh/lpv4.cn_ecc/lpv4.cn.key [Mon 30 Jan 2023 01:09:22 PM HKT] The intermediate CA cert is in: /home/lingen/.acme.sh/lpv4.cn_ecc/ca.cer [Mon 30 Jan 2023 01:09:22 PM HKT] And the full chain certs is there: /home/lingen/.acme.sh/lpv4.cn_ecc/fullchain.cer
4. 配置HTTPS证书
以最流行的Nginx为例,配置使用HTTPS
server{ # SSL configuration listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /home/lpv4/.acme.sh/taoofcoding.tech_ecc/fullchain.cer; ssl_certificate_key /home/lpv4/.acme.sh/lpv4.cn_ecc/lpv4.cn.key; root /usr/share/nginx/lpv4.cn; index index.html index.htm index.nginx-debian.html; server_name www.lpv4.cn lpv4.cn;}
如果你希望你的网站只支持HTTPS,不允许使用HTTP访问,那也比较简单,在nginx中加入以下配置
server { listen 80 ; server_name www.lpv4.cn lpv4.cn; return 301 https://$host$request_uri; }
这样当访问HTTP时,会自动跳转到HTTPS
5 续期
需要注意的是,申请到的HTTPS证书只有90天有效期。需要在有效期到期前续期。
如果是用我在这篇文章中的 acme.sh
申请的,它会基于Linux的crontab自动续期,无需你担心。
你也可以使用以下命令提前renew的你的证书
~/.acme.sh/acme.sh --issue --dns dns_dp -d lpv4.cn -d *.lpv4.cn --force
就是在申请的命令之上,添加 --force
参数就可以了。
如果你想要查询本机上申请了哪些证书,到期时间及下次自动续期时间等。使用 ~/.acme.sh/acme.sh list
就可以了。
终
需要说明的是,除了DNS API申请HTTPS以外, acme.sh还支持 Nginxmode
, Standalonemode
, Webrootmode
等不同方式,适合不同的情况 (比如你没有DNSPOD的管理权限,无法获取KEY等)
总而言之,在今天的互联网,给你的网站加上HTTPS,已经是非常简单并且成本极低的事情了.
你应该毫不犹豫的给你的网站加上HTTPS,还在等什么呢,立刻行动起来!
发表评论