好记性不如烂笔头。趁热记录下,给未来的自己

0 | 前言

现在的网站上 HTTPS 协议,现已是一个越来越普遍、逐渐趋于强制的一个需求了。想当年,遍地是 HTTP,域名运营绑架,各种弹广告,钓鱼的时代现已一去不复返了。

HTTPS 协议会更安全(其实也是相对的)。对用户来说,是一种安全上的维护。但对很多个人和团队开发者,增添了网站布置的妨碍:对个人来说,布置个人博客网站的时候,需求先请求 SSL/TLS, 然后依据布置情况增加到流量网关处;对团队开发来说,有开发,测试和出产环境,每套环境都要布置 HTTPS。

很多人对怎样布置 HTTPS 的网站其实还是有很多疑问的:

  1. 怎样请求 SSL/TLS 证书?
  2. 花不花钱,有没有免费的 SSL/TLS 证书?
  3. 免费的 SSL/TLS 证书有什么约束?
  4. 请求下来的证书怎样来布置?

先说定论:

  1. 有免费的 SSL/TLS 证书,
  2. 免费的会有约束。

本文会依据以上痛点,聚集并解决以下问题:

  1. 一键请求免费TLS证书;
  2. 支撑泛域名解析;
  3. 到期主动续约

1 | 现有的方案

传统公有云

现在免费的 SSL/TLS 证书,能够通过各大云厂商请求,比如阿里云,腾讯云等。可是会有必定的约束:

  1. 只能请求单域名证书,如果是泛域名如 *.lanbitou.tech就需求购买(DV型2000元左右/年)
  2. 不同云厂商的免费单域名证书配额有限,阿里云是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 | 一招白嫖

前提条件

  1. 现已有域名 且 域名是通过这些域名服务商供给的,国内的有阿里云,腾讯云等
  2. 获取云厂商操作API 的 AccessKey ID和AccessKey Secret(通常在用户中心能够找到)
  3. 如果不满意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

如出现如下成果,表示生成证书成功。

网站要上 HTTPS 却没有 SSL/TLS 证书?| 教你一招搞定免费的(泛域名)SSL/TLS 证书

以上。

(如果对 SSL/TLS 证书布置到网站,供给 HTTPS 协议拜访网站有问题,欢迎评论区交流。)