let's encrypt通配符证书自动续期工具支持腾讯云DNS了

栏目: 服务器 · 发布时间: 7年前

内容简介:一个多月前,我写了一个证书管理工具,用于自动续期 let's encrypt 通配符证书,彼时只支持阿里云 DNS,今天该工具也支持腾讯云 DNS 了。该工具支持三种使用策略:该工具托管在

一个多月前,我写了一个证书管理工具,用于自动续期 let's encrypt 通配符证书,彼时只支持阿里云 DNS,今天该 工具 也支持腾讯云 DNS 了。

该工具支持三种使用策略:

    • 支持 Shell+PHP 操作阿里云 DNS。
    • 支持 Shell+Python 操作阿里云 DNS。
    • 支持 Shell+PHP 操作腾讯云 DNS。

该工具托管在 Github 上,如何使用请查阅 README.md 文档,README.md 会随时更新,考虑到公众号文章不能修改,所以本文不介绍该工具的使用方法了。

介绍该工具只是一个引子,主要想分享对于 Github 的一些零碎想法。

1:一些数据

一个月下来,该工具收获了 11 个 star、5 个 fork、1 个 watch、7个 issues,说实话,感觉还是很激动的。

作为一个小众的工具,受到不少人的关注,说明越来越多的人在关注免费 let's encrypt 证书了,而自己写了不少关于 let's encrypt 的文章,在推进 HTTPS 普及方面做了一些工作,也体现了一定的个人价值。

2:Github 是一个社交工具

Github 不仅仅是一个开源代码托管网站,更是一个软件协作平台,来自地球任何一个地方的人,只要对你的项目感兴趣,可以通过 Github 和你沟通,给你提 issues 和 pull request。

以这个工具来说,其中三个人指出了工具存在的 Bug,体现了人多力量大;另外一个人提出了一个疑问,让我意识到在某些方面没有考虑全面,进而完善了该工具;最让我意外的是 @Duke-Wu 提交了一个 PR,从而让工具支持 Python 操作环境;最后一个人咨询是否能够支持腾讯云 DNS,自己原来也考虑过这个需求,但一直迟迟没有开发,看到有用户也有这需求,立刻花费一个晚上搞定了。

3:Github 上应该放什么样的代码

以前和同事讨论过,在 Github 上放什么样的代码(项目)才能受人关注呢?其实,我觉得不能太功利和刻意,托管的代码要能解决实际的问题,解决的问题是大是小并不重要,重要的是能帮助到人。

以我这个工具为例,最初只是为了解决自己遇到的问题,那时 let's encrypt 支持通配符证书特性并不久,当我续期的时候发现 renew 失败,由于我对 let's encrypt 有一些研究,仅仅花了半天就解决了。但想到很多人也可能遇到同样的问题,是否可以将解决方案整理成工具放到 Github 上呢?这就是最初的设想,完全是顺其自然的。

我不太建议在 Github 公共仓库上放一些写给自己的代码,如果代码的受众可能只有自己一个人,那建议放在私有仓库上。在平时工作过程中,可以将通用的一些解决方案抽象、汇总并放到 Github 上。

4:README.md 很重要

从我的角度来说,写这个工具并没有花费太久的时间,反而是 README.md 反反复复修改了多次,花费了很多心力。

README.md 就是告诉人如何使用该工具,在编写的时候要考虑受众,比如多问自己几个问题:

    • 受众知道通配符证书的含义吗?
    • 受众知道 certbot 工具如何安装吗?
    • 工具支持多种操作环境(腾讯云、阿里云、Python、PHP),在介绍的时候如何不冗余又保持精简呢?
    • 受众只是为了快速解决遇到的问题,不愿意看长篇大论的介绍吧?

综合考虑了这些问题,大家觉得目前的 README.md 如何,我希望达到几个目的:

    • 使用人能够快速上手,即使不理解原理也可。
    • 文档简洁,不冗余。
    • 如果想全面了解通配符证书,这个文档也是最好的辅助学习资料。

5:一种优良的学习方式

长话短说,在 Github 中冲量是最好的学习方式,关于这点,每个人都会有所体会,我简单列举几点。

(1)在 Github 放入的代码至少要体面一点吧,比如 commit 消息要写的完善一点,培养良好的变成习惯,如果没有约束(所有的 Github 用户可能会看到你的代码,这就是最大的约束),那开发代码的时候很难保持自律。

(2)能够学习到很多优秀的编码

我最近在写一个小工具,其中使用了 PHP 中的命名空间特性,看手册感觉很简单,但实际编写的时候感觉理解的并不是很充分,有点难以上手的感觉,后来我借鉴了很多 Github 上的代码,看它们是如何组织命名空间的,并从中收获了很多,这就是 Github 的优势。

(3)Github 基于 Git,如果你想学习 Git,根本没有必要自己构建一个 Git 服务器,Github 就是最好的 Github 服务器。

学习使用 Github,同时又能学习 Git,何乐而不为呢?对于我来说,尽量通过命令行方式使用 Github,尽量少使用 Web 界面操作 Github。

(4)能够基于 Github 学习到很多软件开发模式、流程、方法,比如 PR、Issues、Wiki 这些都是 Git 没有的。Github 以 Git 为基础扩充了很多功能,让开发者进一步离不开 Github,这就是他的伟大之处。

大家可以去 GitHub Marketplace 看下,基于 Github 出现了很多工具,这些工具对于软件开发非常重要,形成了完善的软件开发体系。

6:动力

我想指出一点,花在 Github 上的时间不会占用你平时工作、生活的时间,因为这些时间都时挤出来的,原因就在于动力十足,从时间管理的角度来看,动力让你的效率得到极大的提高,也能充分利用时间。

动力来源于内在、外在,外在动力非常重要,以这个工具为例,当 star 数递增的时候,当用户对该工具有进一步期望(比如期望支持腾讯云DNS)的时候,我就使用平时睡觉的时间解决了,这完全是挤压出来的时间,每天的成就感也得到了满足。

那么内在动力在哪儿呢?对于开发者来说,是否拥有自己的 Github 非常重要,类似于简历但比简历更重要,因为简历可能造假、可能只能代表你以前的成就,而 Github 上的成就是无法伪造的,通过 Github 能够看到你最近干了些什么,能够看到你的代码编写风格,能够看到你的专业性,这是评价开发者专业能力最好的手段。

对我来说,Github 是学习和进步的源泉,也是找工作的利器,我也希望好好经营我的 Github,这就是最大的内在动力。

7:API 调用身份验证的策略

这个工具让我对阿里云和腾讯云 API 调用有了一些了解,API 调用的时候是如何对调用者身份验证的呢?背后的密码学算法就是消息验证码(MAC),它能够保证消息的完整性,避免消息被篡改,需要注意的是消息验证码并不是为了数据加密。消息验证码发送者和接收者必须拥有同一把密钥,才能校验消息的完整性,这就是消息验证码算法的全部。关于消息验证码的概念、使用方法可以参考我的书《深入浅出 HTTPS:从原理到实战》。

不管是阿里云还是腾讯云,使用者如果想调用 DNS API,必须先申请 APP 密钥(key),这个 key 必须保持私密,一旦泄露,所有的加密学算法将一无用处,对于静态密钥,有几个建议:

    • 定期变更密钥。
    • 核心员工离职的时候,必须尽快变更密钥。
    • 每个项目使用独立的密钥。
    • 密钥的保存非常重要,比如不要通过邮件传递。
    • 该 API 密钥不要明文保存在代码仓库中,可以使用对称加密算法对 API 密钥加密后保存在代码仓库中,代码仓库中同时保存对称加密算法的密钥(很拗口吧)。这样即使攻击者获取到加密的 API 密钥也无法反解出 API 密钥。

这些就是 API 密钥安全使用的一些建议,那么阿里云、腾讯云是如何具体使用消息验证码保护 API 调用的呢?

API 调用方:

    • 根据具体 API 参数说明,拼装 API 参数(比如 GET、POST)。
    • 添加公共参数,比如 Nonce 参数是为了防重放。
    • 对所有 API 参数(比如 GET、POST)进行排序,然后拼装成一个原始字符串。
    • 对原始字符串进行消息验证码运算(包含 API 密钥),然后进行 base64 运算,得到签名字符串。
    • 将签名字符串作为 API 的一个参数和其他参数结合起来发送 API 调用。

API 接收方(阿里云或腾讯云)

    • 同 API 调用方一样,根据接收到的参数(去除签名值参数)计算出签名字符串。
    • 将计算出的签名字符串和接收到的签名值进行比较,相同代表校验通过,反之校验失败。

具体的签名示例可 参考


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Kotlin实战

Kotlin实战

【美】Dmitry Jemerov(德米特里·詹莫瑞福)、【美】 Svetlana Isakova(斯维特拉娜·伊凡诺沃) / 覃宇、罗丽、李思阳、蒋扬海 / 电子工业出版社 / 2017-8 / 89.00

《Kotlin 实战》将从语言的基本特性开始,逐渐覆盖其更多的高级特性,尤其注重讲解如何将 Koltin 集成到已有 Java 工程实践及其背后的原理。本书分为两个部分。第一部分讲解如何开始使用 Kotlin 现有的库和API,包括基本语法、扩展函数和扩展属性、数据类和伴生对象、lambda 表达式,以及数据类型系统(着重讲解了可空性和集合的概念)。第二部分教你如何使用 Kotlin 构建自己的 ......一起来看看 《Kotlin实战》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器