0%

升级HTTPS全记录

近期把博客升级为HTTPS访问了。记录一下升级过程。

泛域名证书

为了在网站上启用 HTTPS,需要从证书颁发机构申请 SSL 证书。Let’s Encrypt 是一个证书颁发机构,向 Let’s Encrypt 申请证书是免费的。Let’s Encrypt 支持泛域名证书,可以满足我不想为每个子域名单独申请证书的要求。目前常用的 Let’s Encrypt 证书生成工具有 certbotacme.shacme-tiny,我使用的是 acme.shacme.sh 申请和安装泛域名 SSL 证书相对来说是比较方便的。

安装acme.sh

1
2
apt install ca-certificates
curl https://get.acme.sh | sh -s email=your@email.com

安装完之后需要重新打开终端来使 alias 生效。

申请并部署证书

申请证书

image-20230324170953556

DNSPod控制台申请Token并设置环境变量。

1
2
export DP_Id="YourId"
export DP_Key="YourToken"

再通过下面命令生成证书:

1
acme.sh --issue --dns dns_dp -d onebug.tech -d *.onebug.tech

这里第一个域名为顶级域名,后面一个为泛域名。这种方式将自动为域名添加一条 TXT 解析,验证成功后,这条解析记录会被自动删除。证书生成成功后,默认保存在下图的~/.acme.sh下中。

image-20230324171022293

部署证书

使用 acme.sh 部署到七牛之前,需要确保部署的域名已打开 HTTPS 功能

从七牛个人中心的密钥管理里获取 AK 和 SK,设置七牛云密钥的环境变量(建议写到.bashrc中)

1
2
export QINIU_AK="foo"
export QINIU_SK="bar"

运行 acme.sh 命令部署到七牛,由于部署的证书为泛域名证书,还需要设置 QINIU_CDN_DOMAIN 变量,指定实际需要部署的域名(用空格将域名分隔开来):

1
2
export QINIU_CDN_DOMAIN="www.onebug.tech image.onebug.tech"
acme.sh --deploy -d onebug.tech --deploy-hook qiniu

七牛云 - 证书管理 处可以确认部署的情况,并进一步进行HTTPS的设置。

image-20230324181302656

定时更新

acme.sh 已经创建了定时任务,会定期更新证书(证书的有效期为90 天,acme.sh 会60天强制更新一次)。

需要添加一条来自动部署到七牛的定时任务crontab -e

1
2
0 0 1 * * "/home/ubuntu/.acme.sh"/acme.sh --deploy -d www.example.com --deploy-hook qiniu --home "/home/ubuntu/.acme.sh" > /dev/null
0 0 1 * * "/root/.acme.sh"/acme.sh --deploy -d onebug.tech --deploy-hook qiniu --home "/root/.acme.sh" > /dev/null

更新博客设置

写脚本更新markdown笔记中的http链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import os
import fnmatch
import re

def find_markdown_files(root):
markdown_files = []
for path, dirnames, filenames in os.walk(root):
for filename in fnmatch.filter(filenames, '*.md'):
markdown_files.append(os.path.join(path, filename))
return markdown_files

def replace_http_with_https(files,src,dst):
for file in files:
with open(file, 'r',encoding='utf-8') as f:
content = f.read()
content = re.sub(src, dst, content)
with open(file, 'w',encoding='utf-8') as f:
f.write(content)

# 调用函数并传入要查找的目录
markdown_files = find_markdown_files('.')

# 替换所有markdown文件中的http为https
replace_http_with_https(markdown_files,r'http://image.onebug.tech',r'https://image.onebug.tech')
replace_http_with_https(markdown_files,r'http://www.onebug.tech',r'https://www.onebug.tech')

修改站点链接、头像图链接、picgo图床等设置。

执行hexo更新命令后同步文件。

Let’s Encrypt SSL 泛域名证书申请和配置 - 知乎 (zhihu.com)

acme云服务器生成证书_使用 acme.sh 自动签发 letsencrypt 证书并部署到七牛云融合 CDN…_weixin_39924179的博客-CSDN博客

deployhooks · acmesh-official/acme.sh Wiki (github.com)