内容简介:一个多月前,我写了一个证书管理工具,用于自动续期 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 调用方一样,根据接收到的参数(去除签名值参数)计算出签名字符串。
- 将计算出的签名字符串和接收到的签名值进行比较,相同代表校验通过,反之校验失败。
具体的签名示例可 参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- acme.sh 续期问题(路径问题)
- PowerShell转义通配符
- LeetCode44.通配符匹配 JavaScript
- Wildpwn:Unix通配符攻击工具
- Java 泛型之上界下界通配符
- 004-零失败快速搞定通配符SSL证书
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Hacker's Delight
Henry S. Warren Jr. / Addison-Wesley / 2002-7-27 / USD 59.99
A collection useful programming advice the author has collected over the years; small algorithms that make the programmer's task easier. * At long last, proven short-cuts to mastering difficult aspec......一起来看看 《Hacker's Delight》 这本书的介绍吧!