前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >通过acme.sh开源工具申请泛解析SSL证书

通过acme.sh开源工具申请泛解析SSL证书

原创
作者头像
星哥玩云
修改于 2025-03-31 07:44:59
修改于 2025-03-31 07:44:59
12300
代码可运行
举报
运行总次数:0
代码可运行

通过acme.sh开源工具申请泛解析SSL证书

前期准备

1.域名

2.Linux云服务器(本文系统某讯云的Centos7),测试公网IP为:150.158.130.33

3.域名服务商的API Token,或者域名解析到申请SSL云服务器IP(实验项目: ssl.xgss.net)

安装acme.sh

普通用户和 root 用户都可以安装使用. 安装过程进行了以下几步:

代码语言:javascript
代码运行次数:0
运行
复制
# yum install socat -y
​
# curl https://get.acme.sh | sh
# curl https://get.acme.sh | sh -s email=my@example.com(zerossl.com注册的邮箱账号,在浏览器登录ZeroSSL之后可以看到证书)
​
# 或者
# wget -O- https://get.acme.sh | sh

国内的服务器下载github可能会比较慢,如果下载失败,可以多执行几次。

1、把 acme.sh 安装到你的 home 目录下:~/.acme.sh/ 装过程不会污染已有的系统任何功能和文件, 所有的修改都限制在安装目录中: ~/.acme.sh/

2、并创建 一个 bash 的 alias, 方便你的使用: alias acme.sh=~/.acme.sh/acme.sh

3、自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书.

把 acme.sh 安装到你的 home 目录下:~/.acme.sh/并创建 一个 bash 的 alias, 方便你的使用:

代码语言:javascript
代码运行次数:0
运行
复制
alias acme.sh=~/.acme.sh/acme.sh
echo 'alias acme.sh=~/.acme.sh/acme.sh' >>/etc/profile

常用命令

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --help     #获取帮助
acme.sh --version  # 查看版本
​

关联 ZeroSSL

目前 acme.sh 支持四个正式环境 CA,分别是 Let’s Encrypt、Buypass、ZeroSSL 和 SSL.com,默认使用 ZeroSSL,所以我们不用切换。如果不放心,可以设置一下:

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --set-default-ca --server zerossl

生成证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: HTTP 和 DNS 验证。

如果有条件建议使用DNS验证,

HTTP认证

此方法好像不支持域名的泛解析,笔者想泛解析做泛域名的认证,但一直不成功,不知道什么原因。

域名解析

代码语言:javascript
代码运行次数:0
运行
复制
ssl.xgss.net A记录解析到 150.158.130.33
只解析上面一条即可,因为只是为 ssl.xgss.net 申请证书,后面的解析是为了实验能否申请到多*.xgss.net的证书
xgss.net A记录解析到 150.158.130.33
*.xgss.net A记录解析到 150.158.130.33

配置http站点

代码语言:javascript
代码运行次数:0
运行
复制
# mkdir -p /data/wwwroot/web/ssl.xgss.net/
# echo 'hello SSL'> /data/wwwroot/web/ssl.xgss.net/index.html
配置nginx站点
server {
  listen       80;
  access_log /dev/null;
  error_log /dev/null;
  server_name  ssl.xgss.net xgss.net;
  root /data/wwwroot/web/ssl.xgss.net/;
  location / {
                index  index.html index.htm index.php;
        }
}

验证是否配置正常

代码语言:javascript
代码运行次数:0
运行
复制
# curl http://ssl.xgss.net/
hello SSL

http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了.

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh  --issue  -d mydomain.com -d www.mydomain.com  --webroot  /home/wwwroot/mydomain.com/

只需要指定域名, 并指定域名所在的网站根目录. acme.sh 会全自动的生成验证文件, 并放到网站的根目录, 然后自动完成验证. 最后会聪明的删除验证文件. 整个过程没有任何副作用.

如果你用的 nginx服务器, 或者反代, acme.sh 还可以智能的从 nginx的配置中自动完成验证, 你不需要指定网站根目录:

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --issue  -d mydomain.com   --nginx

注意, 无论是 apache 还是 nginx 模式, acme.sh在完成验证之后, 会恢复到之前的状态, 都不会私自更改你本身的配置. 好处是你不用担心配置被搞坏, 也有一个缺点, 你需要自己配置 ssl 的配置, 否则只能成功生成证书, 你的网站还是无法访问https. 但是为了安全, 你还是自己手动改配置吧.

如果你还没有运行任何 web 服务, 80 端口是空闲的, 那么 acme.sh 还能假装自己是一个webserver, 临时听在80 端口, 完成验证:

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh  --issue -d mydomain.com   --standalone

app点zerossl点com/signup 使用邮箱注册一个账号,假设账号的邮箱为:"XXXX#163.com"

代码语言:javascript
代码运行次数:0
运行
复制
# /root/.acme.sh/acme.sh --register-account -m XXXX@163.com
[Mon Jun 27 13:37:27 CST 2022] No EAB credentials found for ZeroSSL, let's get one
[Mon Jun 27 13:37:30 CST 2022] Registering account: https://acme.zerossl.com/v2/DV90
[Mon Jun 27 13:37:38 CST 2022] Registered
[Mon Jun 27 13:37:38 CST 2022] ACCOUNT_THUMBPRINT='*********************'

申请证书

将证书放到一个指定的目录,scrm用nginx配置,本例是指定在/data/wwwroot/web/ssl目录下

1.创建ssl存放目录

代码语言:javascript
代码运行次数:0
运行
复制
mkdir -p /data/wwwroot/web/ssl

2.申请SSL证书

申请单域名证书,并且指定证书存放的目录

代码语言:javascript
代码运行次数:0
运行
复制
# /root/.acme.sh/acme.sh  --issue -d ssl.xgss.net  --webroot  /data/wwwroot/web/ssl.xgss.net/ \
--keypath       /data/wwwroot/web/ssl/ssl.xgss.net.key  \
--fullchainpath /data/wwwroot/web/ssl/ssl.xgss.net.key.pem \
--reloadcmd "/usr/local/openresty/nginx/sbin/nginx -s reload"

--reloadcmd 表示复制完成后重启服务器的命令,根据自己服务器状况填写。

/data/wwwroot/web/ssl/ 需要自己建立好,如果文件夹不存在,会报错。

3.生成dhparam文件

代码语言:javascript
代码运行次数:0
运行
复制
openssl dhparam -out /data/wwwroot/web/ssl/dhparam.pem     2048         

4.配置ssl.xgss.net的nginx配置。

代码语言:javascript
代码运行次数:0
运行
复制
  server {
        listen 443 ssl;
        access_log /dev/null;
        error_log /dev/null;
        server_name  ssl.xgss.net;
        root /data/wwwroot/web/ssl.xgss.net/ ;
        
        ssl_certificate     /data/wwwroot/web/ssl/ssl.xgss.net.key.pem;
        ssl_certificate_key /data/wwwroot/web/ssl/ssl.xgss.net.key;
​
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /data/wwwroot/web/ssl/dhparam.pem;
        
        location / {
            index  index.html index.htm index.php;
        }
     }

浏览器访问: https://ssl.xgss.net

证书信息

ZeroSSL官网证书截图

DNS认证

手动DNS方式

手动在域名上添加一条 txt 解析记录, 验证域名所有权。

这种方式的好处是, 你不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证. 坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh  --issue  --dns   -d mydomain.com \
 --yes-I-know-dns-manual-mode-enough-go-ahead-please

然后, acme.sh 会生成相应的解析记录显示出来, 你只需要在你的域名管理面板中添加这条 txt 记录即可.

等待解析完成之后, 重新生成证书:

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh  --renew   -d mydomain.com \
  --yes-I-know-dns-manual-mode-enough-go-ahead-please

注意第二次这里用的是 --renew

自动DNS方式

dns 方式的真正强大之处在于可以使用域名解析商提供的 api 自动添加 txt 记录完成验证.

由于acme.sh对域名解析/提供商的支持十分广泛,所以请针对自己所在的域名提供商获取对应的API Token,目前支持 cloudflare, dnspod, cloudxns, godaddy 以及 ovh 等数十种解析商的自动集成.

支持列表: https://github.com/acmesh-official/acme.sh/wiki/dnsapi

国内目前使用较多的是某讯云和某里云,获取API Token的方法分别是:

  • 某讯云的DNSPod 登录DNSPod,进入顶部导航栏里的用户中心,在左侧的导航栏里,找到安全设置,看到页面的最下面,有个API Token.点击查看->创建API Token->填写Tokens名称,复制好ID与Token即可.保存待用。
  • 某里云域名 需要登录到某里云官网获取Ali_Key和Ali_Secret。点击此处跳转 | https://usercenter.console.aliyun.com/#/manage/ak 当然可以直接使用accessKey

某里云API Token申请

申请子账户来申请。

详细就不列举了,有疑问可以后台提交工单。

申请泛解析域名证书

获取到对应的API Token之后我们需要将id和key设置为环境变量,供acme.sh调用:

代码语言:javascript
代码运行次数:0
运行
复制
# DNSPod
export DP_Id="你的 API ID"
export DP_Key="你的 Token"
​
# aliyun
export Ali_Key="你的 AccessKey ID"
export Ali_Secret="你的 AccessKey Secret"

临时环境变量只需配置这一次即可,当成功申请证书后,API 信息会被自动保存在~/.acme.sh/account.conf里,下次你使用acme.sh的时候系统会自动读取并使用。

腾讯云DNSpod:

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --issue -d example.com -d *.example.com --dns dns_dp

某云:

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --issue  -d example.com -d *.example.com --dns dns_ali
代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --issue  -d xgss.net -d *.xgss.net --dns dns_ali \
--keypath       /data/wwwroot/web/ssl/all.xgss.net.key  \
--fullchainpath /data/wwwroot/web/ssl/all.xgss.net.key.pem \
--reloadcmd "/usr/local/openresty/nginx/sbin/nginx -s reload"
​
openssl dhparam -out /data/wwwroot/web/ssl/dhparam.pem     2048      
​
# ll /data/wwwroot/web/ssl
total 16
-rw------- 1 root root 1679 Jun 27 19:02 all.xgss.net.key
-rw-r--r-- 1 root root 6684 Jun 27 19:02 all.xgss.net.key.pem
-rw-r--r-- 1 root root  424 Jun 27 19:03 dhparam.pem

(一个小提醒, 这里用的是 service nginx force-reload, 不是 service nginx reload, 据测试, reload 并不会重新加载证书, 所以用的 force-reload)

你的KEY和Secret都将明文保存‘~/.acme.sh/account.conf’文件中,注意保护隐私。

域名后台新增了两条记录

验证SSL

浏览器打开网址,点击地址的小锁图标,可以查看更多信息。

代码语言:javascript
代码运行次数:0
运行
复制
# curl https://ssl2.xgss.net/
hello SSL
[root@shanghai-node02 ssl]# curl https://ssl3.xgss.net/
hello SSL
[root@shanghai-node02 ssl]# curl https://ssl4.xgss.net/
hello SSL

定时更新证书

安装过程中会自动为你创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书。

代码语言:javascript
代码运行次数:0
运行
复制
00 00 * * * root /root/.acme.sh/acme.sh --cron --home /root/.acme.sh &>/var/log/acme.sh.logs

查看已安装证书的信息

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --info -d xgss.net

更新证书

目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心.

请确保 cronjob 正确安装, 看起来是类似这样的:

代码语言:javascript
代码运行次数:0
运行
复制
crontab  -l
​
56 * * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

更新acme.sh

目前由于 acme 协议和 letsencrypt CA 都在频繁的更新, 因此 acme.sh 也经常更新以保持同步.

升级 acme.sh 到最新版

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --upgrade

如果你不想手动升级, 可以开启自动升级:

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh  --upgrade  --auto-upgrade

之后, acme.sh 就会自动保持更新了.

你也可以随时关闭自动更新:

代码语言:javascript
代码运行次数:0
运行
复制
acme.sh --upgrade  --auto-upgrade  0

参考

官方中文说明: https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
学习GAN模型量化评价,先从掌握FID开始吧
Frechet Inception 距离得分(Frechet Inception Distance score,FID)是计算真实图像和生成图像的特征向量之间距离的一种度量。
机器之心
2019/10/15
3.5K0
学习GAN模型量化评价,先从掌握FID开始吧
高斯混合模型 GMM 的详细解释
来源:机器学习杂货店本文约3500字,建议阅读10+分钟本文为你介绍 KMeans 的一个替代方案之一,高斯混合模型。 高斯混合模型(后面本文中将使用他的缩写 GMM)听起来很复杂,其实他的工作原理和 KMeans 非常相似,你甚至可以认为它是 KMeans 的概率版本。这种概率特征使 GMM 可以应用于 KMeans 无法解决的许多复杂问题。 因为KMeans的限制很多,比如:它假设簇是球形的并且大小相同,这在大多数现实世界的场景中是无效的。并且它是硬聚类方法,这意味着每个数据点都分配给一个集群,这也是不
数据派THU
2023/05/11
8910
高斯混合模型 GMM 的详细解释
深入浅出贝叶斯模型选择
贝叶斯推理[1](Bayesian inference)是统计学中的一个重要问题,也是许多机器学习方法中经常遇到的问题。例如,用于分类的高斯混合模型或用于主题建模的潜在狄利克雷分配(Latent Dirichlet Allocation,简称LDA)模型等概率图模型都需要在拟合数据时解决这一问题。
数据STUDIO
2021/11/10
1.6K0
高斯过程 Gaussian Processes 原理、可视化及代码实现
本文解析了高斯过程进行公式推导、原理阐述、可视化以及代码实现,并介绍了高斯过程回归基本原理、超参优化、高维输入等问题。
AI算法与图像处理
2020/11/06
6.3K0
高斯过程 Gaussian Processes 原理、可视化及代码实现
机器学习(16)——EM算法示例
算法思想:含有隐变量的极大似然估计 我们经常会从样本观察数据中,找出样本的模型参数。 最常用的方法就是极大化模型分布的对数似然函数。 但是在一些情况下,我们得到的观察数据有未观察到的隐含数据,此时我们未知的有隐含数据和模型参数,因而无法直接用极大化对数似然函数得到模型分布的参数。怎么办呢?这就是EM算法可以派上用场的地方了。那么先复习一下极大似然估计。 极大似然估计(MLE) 直接举个例子: 某位同学与一位猎人一起外出打猎,一只野兔从前方窜过。只听一声枪响,野兔应声到下,如果要你推测,这一发命中的子弹是谁打
DC童生
2018/04/27
1.6K0
机器学习(16)——EM算法示例
概率论11 协方差与相关系数
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!
Vamei
2018/09/25
1.4K0
概率论11 协方差与相关系数
概率论11 协方差与相关系数
前面介绍的分布描述量,比如期望和方差,都是基于单一随机变量的。现在考虑多个随机变量的情况。我们使用联合分布来表示定义在同一个样本空间的多个随机变量的概率分布。 联合分布中包含了相当丰富的信息。比如从联合分布中抽取某个随机变量的边缘分布,即获得该随机变量的分布,并可以据此,获得该随机变量的期望和方差。这样做是将视线限制在单一的一个随机变量上,我们损失了联合分布中包含的其他有用信息,比如不同随机变量之间的互动关系。为了了解不同随机变量之间的关系,需要求助其它的一些描述量。 协方差 协方差(covariance)
Vamei
2018/01/18
7010
概率论11 协方差与相关系数
FID指标复现踩坑避坑 文本生成图像FID定量实验全流程复现(Fréchet Inception Distance )定量评价实验踩坑避坑流程
在系统运维中,性能调优是确保系统高效运行的关键任务。CPU是系统的核心资源之一,其性能直接影响系统的整体运行速度。内存是系统运行的重要资源,内存不足会导致系统性能下降,甚至崩溃。磁盘I/O性能是系统性能的瓶颈之一,通过优化磁盘I/O,可以显著提升系统性能。这篇文章深入探讨了如何优化CPU、内存和磁盘I/O资源的使用,通过详细的策略和示例代码,帮助您实现系统性能的提升。
中杯可乐多加冰
2024/11/26
3570
二次判别分析(QDA)和Python实现
其中μ为类特有的均值向量,σ为类特有的协方差矩阵。利用贝叶斯定理,我们现在可以计算类后验
deephub
2021/04/16
1.3K1
【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(上)
BBsolve()@BB:使用Barzilai-Borwein步长求解非线性方程组
统计学家
2019/04/10
2.9K0
【数据分析 R语言实战】学习笔记 第六章 参数估计与R实现(上)
用Python生成随机样本
如何生成一个随机变量/随机向量的随机样本?连续型随机变量离散型随机变量随机向量Markov 链的一个轨道与其极限分布的关系
用户3577892
2020/06/12
6830
用Python生成随机样本
Matplotlib时间序列型图表(2)
在上一篇文章中,我们了解了时间序列图表的绘制方法,效果如下(滑动以浏览),对以往的工作做个总结。目的就是简化大家代码的书写过程,拓宽绘图方法,为科研和商业绘图提供帮助。
python数据可视化之路
2023/02/23
6590
Matplotlib时间序列型图表(2)
Text to Image 文本生成图像定量评价指标分析笔记 Metric Value总结 IS、FID、R-prec等
这里推荐一篇实用的文章:一文彻底弄懂 MySQL 优化:从 Java 后端视角出发。
中杯可乐多加冰
2024/11/25
1970
生成专题1 | 图像生成评价指标 Inception Score (IS)
熵entropy可以被用来描述随机性:如果一个随机变量是高度可预测的,那么它就有较低的熵;相反,如果它是乱序随机的,那么它就是有较高的熵。这和训练分类网络所用的交叉熵是同一个道理。
机器学习炼丹术
2022/03/15
2.2K0
生成专题1 | 图像生成评价指标 Inception Score (IS)
Python AI 教学 | EM算法(Expectation Maximization Algorithm)及应用
假设目前有100个男生和100个女生的身高,共200个数据,但是我们不知道这200个数据中哪个是男生的身高,哪个是女生的身高。假设男生、女生的身高分别服从正态分布,但每个样本从哪个分布抽取的,我们目前是不知道的。这个时候,对于每一个样本,就有两个方面需要猜测或者估计: 这个身高数据是来自于男生还是来自于女生?男生、女生身高的正态分布的参数分别是多少?EM算法要解决的问题正是这两个问题。
用户1621951
2019/10/18
2.1K0
Python AI 教学 | EM算法(Expectation Maximization Algorithm)及应用
深度学习-数学基础
目前主要有两种度量模型深度的方式。第一种方式是基于评估架构所需执行的顺序指令的数目。假设我们将模型表示为给定输入后,计算对应输出的流程图,则可以将这张流程图中的最长路径视为模型的深度。另一种是在深度概率模型中使用的方法,它不是将计算图的深度视为模型深度,而是将描述概念彼此如何关联的图的深度视为模型深度。在这种情况下,计算每个概念表示的计算流程图的深度可能比概念本身的图更深。这是因为系统对较简单概念的理解在给出更复杂概念的信息后可以进一步精细化
范中豪
2019/09/10
8360
深度学习-数学基础
马氏距离 (马哈拉诺比斯距离) (Mahalanobis distance)
马氏距离(Mahalanobis distance)是由印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出的,表示点与一个分布之间的距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是,它考虑到各种特性之间的联系,本文介绍马氏距离相关内容。 欧氏距离的缺点 距离度量在各个学科中有着广泛用途,当数据表示为向量\overrightarrow{\mathbf{x} }=\left(x_{1}, x_{2}, \cdots, x_{n}\right)^{T}和\overr
为为为什么
2022/08/05
2.1K0
马氏距离 (马哈拉诺比斯距离) (Mahalanobis distance)
线性判别分析(Linear Discriminant Analysis, LDA) 学习笔记 + matlab实现
线性判别分析 (LDA)是对费舍尔的线性鉴别方法(FLD)的归纳,属于监督学习的方法。LDA使用统计学,模式识别和机器学习方法,试图找到两类物体或事件的特征的一个线性组合,以能够特征化或区分它们。所得的组合可用来作为一个线性分类器,或者,更常见的是,为后续的分类做降维处理。
大鹅
2021/06/16
1.2K0
概率论基础 - 11 - 高斯分布 / 正态分布
本文记录高斯分布。 高斯分布 / 正态分布 正态分布是很多应用中的合理选择。如果某个随机变量取值范围是实数,且对它的概率分布一无所知,通常会假设它服从正态分布。有两个原因支持这一选择: 建模的任务的真实分布通常都确实接近正态分布。 中心极限定理表明,多个独立随机变量的和近似正态分布。 在具有相同方差的所有可能的概率分布中,正态分布的熵最大(即不确定性最大)。 一维正态分布 正态分布的概率密度函数为: p(x)=\frac{1}{\sqrt{2 \pi} \sigma} e{-(x-\mu){2}
为为为什么
2022/08/05
1.6K0
概率论基础 - 11 - 高斯分布 / 正态分布
图像质量评价方法PSNR+SSIM&&评估指标SROCC,PLCC
今天发现ssim的计算里面有高斯模糊,为了快速计算,先对每个小块进行计算,然后计算所有块的平均值。可以参考源代码实现,而且代码实现有近似的在里面!matlab中中图像PSNR和SSIM的计算
全栈程序员站长
2022/09/20
3.8K0
推荐阅读
相关推荐
学习GAN模型量化评价,先从掌握FID开始吧
更多 >
目录
  • 通过acme.sh开源工具申请泛解析SSL证书
  • 前期准备
  • 安装acme.sh
    • 常用命令
    • 关联 ZeroSSL
    • 生成证书
  • HTTP认证
    • 域名解析
    • 申请证书
      • 1.创建ssl存放目录
      • 2.申请SSL证书
      • 3.生成dhparam文件
      • 4.配置ssl.xgss.net的nginx配置。
    • ZeroSSL官网证书截图
  • DNS认证
    • 手动DNS方式
    • 自动DNS方式
    • 某里云API Token申请
    • 申请泛解析域名证书
    • 验证SSL
  • 定时更新证书
  • 查看已安装证书的信息
  • 更新证书
  • 更新acme.sh
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档