好记性不如烂笔头。趁热记录下,给未来的自己
0 | 前言
现在的网站上 HTTPS 协议,现已是一个越来越普遍、逐渐趋于强制的一个需求了。想当年,遍地是 HTTP,域名被运营商绑架,各种弹广告,钓鱼的时代现已一去不复返了。
HTTPS 协议会更安全(其实也是相对的)。对用户来说,是一种安全上的维护。但对很多个人和团队开发者,增添了网站布置的妨碍:对个人来说,布置个人博客网站的时候,需求先请求 SSL/TLS, 然后依据布置情况增加到流量网关处;对团队开发来说,有开发,测试和出产环境,每套环境都要布置 HTTPS。
很多人对怎样布置 HTTPS 的网站其实还是有很多疑问的:
- 怎样请求 SSL/TLS 证书?
- 花不花钱,有没有免费的 SSL/TLS 证书?
- 免费的 SSL/TLS 证书有什么约束?
- 请求下来的证书怎样来布置?
先说定论:
- 有免费的 SSL/TLS 证书,
- 免费的会有约束。
本文会依据以上痛点,聚集并解决以下问题:
- 一键请求免费TLS证书;
- 支撑泛域名解析;
- 到期主动续约
1 | 现有的方案
传统公有云
现在免费的 SSL/TLS 证书,能够通过各大云厂商请求,比如阿里云,腾讯云等。可是会有必定的约束:
- 只能请求单域名证书,如果是泛域名如
*.lanbitou.tech
就需求购买(DV型2000元左右/年) - 不同云厂商的免费单域名证书配额有限,阿里云是20个,腾讯云是50个,
也能够生成自签名的证书,可是这种证书一般浏览器不认,或者需求增加各种信赖装备,本地开发调试到没问题,可是给到用户侧,肯定是不能这么操作的。
Let’s Encrypt
除了以上的方案外,还能够基于 Let’s Encrypt 生成免费证书。
Let’s Encrypt 是一个由非营利性安排互联网安全研讨小组(ISRG)供给的免费、主动化和敞开的证书颁布组织(CA)。 借助Let’s Encrypt颁布的证书能够为我们的网站免费启用HTTPS(SSL/TLS). Let’s Encrypt 运用 ACME 协议来验证您对给定域名的控制权并向您颁布证书。要取得 Let’s Encrypt 证书,您需求挑选一个要运用的 ACME 客户端软件。Let’s Encrypt 不控制或审查第三方客户端,也不能保证其安全性或可靠性。
官方供给了几种证书的请求方式方法
- letsencrypt.org/zh-cn/docs/…
certbot#
它既能够仅为您获取证书,也能够帮助您安装证书(如果您需求的话)。它易于运用,适用于许多操作系统,而且具有超卓的文档。
certbot.eff.org/
acme.sh#
现在 Let’s Encrypt 免费证书客户端最简单、最智能的 shell 脚本,能够主动发布和续订 Let’s Encrypt 中的免费证书
- github.com/acmesh-offi…
下面会介绍基于 acme.sh 来创立泛域名证书。
2 | 一招白嫖
前提条件
- 现已有域名 且 域名是通过这些域名服务商供给的,国内的有阿里云,腾讯云等
- 获取云厂商操作API 的 AccessKey ID和AccessKey Secret(通常在用户中心能够找到)
- 如果不满意1或2,不代表不能运用 acme.sh,能够手工增加 dns 解析来认证。满意1和2能够运用generate_tls_cer.sh来一键生成证书。
generate_tls_cer.sh
#!/bin/bash -e
# created by lanbitou
install_acme (){
echo -e "\033[32m ====> check if acme.sh is installed ... \033[0m"
if [ -e $HOME/.acme.sh/acme.sh ]; then
echo -e "\033[32m ====> acme.sh is installed ... \033[0m"
return 0
fi
echo -e "\033[32m ====> acme.sh is not installed, installing ... \033[0m"
curl https://get.acme.sh | sh
if [ $? != 0 ]; then
echo -e "\033[31m ====> acme.sh installed from origin failed, try backup source ... \033[0m"
curl https://gitee.com/neilpang/acme.sh | sh
if [ $? != 0 ]; then
echo -e "\033[31m ====> acme.sh installed failed, aborted ... \033[0m"
return 1
fi
fi
return 0
}
dns="$1"
domain="$2"
install_acme
if [ $? != 0 ]; then
exit 1
fi
echo -e "\033[32m ====> start to generate tls certificates by acme.sh \033[0m"
$HOME/.acme.sh/acme.sh --issue --dns $dns -d $domain --force
if [ ! -d $domain ]; then
mkdir $domain
fi
cp $HOME/.acme.sh/$domain'_ecc'/* $domain/
echo -e "\033[32m ====> tls certificates generated successfully! Find them in ./$domain. \033[0m"
运用方式
这儿以阿里云举例
export Ali_Key="LTAI4F************ios2r"
export Ali_Secret="nIpymix0s****a0b****RE****SrkF"
bash generate_tls_cer.sh dns_ali *.lanbitou.tech
如出现如下成果,表示生成证书成功。
以上。
(如果对 SSL/TLS 证书布置到网站,供给 HTTPS 协议拜访网站有问题,欢迎评论区交流。)