TLS TLSCert X.509 OpenSSL
2022-01-22
上一篇:2021-08-08, OCSP 联机证书状态协议
OpenSSL 步骤
rm -rf /tmp/ocsptest/; mkdir -p /tmp/ocsptest/; cd /tmp/ocsptest/; ls
# 获取证书
openssl s_client -showcerts -connect markjour.com:443 < /dev/null | awk -v c=-1 '/-----BEGIN CERTIFICATE-----/{f=1;c++}f {print > ("l"c".crt")}/---END CERTIFICATE-----/{f=0}'
cat l*.crt > chain.crt
# 获取 OCSP URL
ocspUrl=$(openssl x509 -noout -text -in l0.crt | grep OCSP | xargs); ocspUrl=${ocspUrl#*URI:}; echo $ocspUrl;
# http://ocsp.digicert.com
# 获取证书序列号
serial=$(openssl x509 -serial -noout -in l0.crt); serial=${serial#*=}; echo $serial;
# 01F284D36E08179CF4CEB5D339FE95E9
# OCSP 校验
openssl ocsp -nonce -issuer l1.crt -CAfile chain.crt -url $ocspUrl -serial "0x${serial}"
# WARNING: no nonce in response
# Response verify OK
# 0x01F284D36E08179CF4CEB5D339FE95E9: good
# This Update: Jan 21 08:15:01 2022 GMT
# Next Update: Jan 28 07:30:01 2022 GMT
个人
2022-01-19
我用的最多的输入法:
- 搜狗
搜狗在中文输入法方面确实是做的不错,没得说。
- 百度
百度输入法是小米自带(我是一个资深小米用户),有时懒得换也就用了。而且百度输入法还有一个好的地方,就是如果手机接入物理键盘后,它会只显示一个横条,不占界面。
- RIME
RIME 是我在 Linux 上的输入法, 一转眼就用了好几年了。
RIME 是一个开源项目,没有搜狗、百度那样的云服务(那种智能的全句输入)支持,在使用方面不如他们顺手,本地词库也确实有些单薄。话说回来,也够用了,几年的真实感受。
而且一旦习惯了 Linux 的折腾,这种全部在自己的掌控之中的感受就很上瘾。你要是熟悉 RIME 的话,你就懂我说的了,词库全部在掌握之中。
PS: Ubuntu 中的 IBUS 智能拼音(libpinyin/ibus-libpinyin)也是可以自己控制词库。
搜狗和百度都是封闭的,他们的用户词库都不支持导出(加密的不算)。我常常觉得要是可以把搜狗和百度中的词库导入 RIME 就好了。他们自己弄的那些个词库就不指望了,只是希望可以把我输入的那部分给我。
最近发现讯飞输入法效果不错,不输搜狗和百度,而且支持导出词库(目前只发现手机端可以导出,PC 端我已经在线反馈,等回复中)。
现在已经全部切入讯飞输入法。
PS: 讯飞的词库和搜狐比差太多,不见得比 Rime 强多少,但我相信运行一段时间之后会越来越好的。
关于讯飞输入法在 Debian/Ubuntu 上的安装
# Index of /deepin/pool/non-free/i/iflyime/
# ../
# iflyime_0.9.972_amd64.deb 18-Dec-2019 13:31 27M
# iflyime_0.9.988_amd64.deb 14-May-2020 17:49 49M
wget http://packages.deepin.com/deepin/pool/non-free/i/iflyime/iflyime_0.9.988_amd64.deb -P ~/Resources
gdebi ~/Resources/iflyime_0.9.988_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Reading state information... Done
此软件包不可安装
Dependency is not satisfiable: fcitx-frontend-qt4
看起来是 Qt4 被砍掉了的缘故,应该可以解决。但是从上一次发版(2020/05/14)到现在已经一年半了,没有出新版本,可能是讯飞输入法 Linux 版项目被停了,所以就算了吧。
Redis 架构 分布式锁
2022-01-18
SET lockKey endpointFlag EX 10 NX
Golang
2022-01-18
InfoQ 的公众号文章《解读Go语言的2021:稳定为王》中引用 TIOBE Index 和 Google Trends 的数据来分析 Go 语言的发展趋势。
非常有意思,我找他的思路,直接去源头研究了一番。
Go 在 2009 年和 2016 年得了 TIOBE 年度语言。
PS: Go 是 2009 年 11 月发布。TIOBE 也是够捧场了,刚一出来就得了年度语言。
根据 TIOBE 的数据,Go 在 2016 年下半年大火了一波,随后热度消退,从 2018 年到现在一直比较稳定。
然后 Google Trends 的数据(2009/10/01 至今,全球)显示:
- Go 在 2009 年诞生之后就慢慢攀升
- 2012 年达到一个阶段
- 2013 年 10 月又上一个台阶
- 2014 年 5 月达到巅峰
- 然后一直持续下跌到 2020 年底
- 2021 年稍有复苏的迹象
最后再上这张图,看看 Go 在各个地区的火爆程度:
那篇文章,包括我之前在网上看到的其他文章,都在这个地方得出了一个结论:Go 在国内的热度远超国外,甚至有地方说 Go 语言的热度全靠国内开发者支撑。
我认为这是非常不严谨的。
其实 Google Trends 的数据是根据这个地方搜索相关词条的比例来计算的。而 Google 的中国用户已经被过滤过一道,应该是以开发者为主。所以这个热度数据的对比是不能说明什么问题的。而且由于一些上网方式的问题,国内的这部分统计数据应该是非常不可靠的。
Git 开发工具
2022-01-17
读到微信公众号文章 本地如何配置多个 GitHub/Gitee 账号?,想起了几年前,面对这样的需求,我自己也是这么操作的。
Linux 工具
2022-01-16
常规的系统自带工具就不提了。
htop
代替 top
jq
JSON
bat
代替 cat
dog
DNS 查询
tldr
替代 man 文档
ack
ag 代替 grep
fzf
fuck
mtr
代替 traceroute
httppie
代替 wget 和 curl
ncdu
代替 du
duf
代替 df
pydf
代替 df
fd
代替 find
eva
代替 ls
neovim
代替 vim
lftp
代替 ftp
aria2
nnn
参考资料与拓展阅读
字符编码
2022-01-15
问题
我拿到一串字符串:
"Client: \\344\\275\\240\\345\\245\\275\\357\\274\\214\\344\\270\\226\\347\\225\\214"
根据上下文,我知道这是 UTF-8。
print(b'Client: \344\275\240\345\245\275\357\274\214\344\270\226\347\225\214'.decode())
# 'Client: 你好,世界'
现在的问题是,我怎么把他转换成普通的字符串呢(unicode)?
再举例子
这其实是一个比较普遍的问题,只要有过一段时间 Python 开发,可能就会偶尔碰到这样的问题:
a = "I Love 中国".encode('utf-8')
b = str(a)
# "b'I Love \\xe4\\xb8\\xad\\xe5\\x9b\\xbd'"
由于不同系统或者不同模块之间的衔接有问题(有可能部分组件只支持 ASCII),中间的过程不受我们控制,最后,我们就是拿到了这个 b,怎么给转换成 a?
解决方案
s = "Client: \\344\\275\\240\\345\\245\\275\\357\\274\\214\\344\\270\\226\\347\\225\\214"
result = eval(f'b"{s}".decode("utf-8")')
print(result)
# Client: 你好,世界
但是这有点危险,改成 str.literal_eval
好一些:
s = "Client: \\344\\275\\240\\345\\245\\275\\357\\274\\214\\344\\270\\226\\347\\225\\214"
# b'Client: \xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'
import ast
print(ast.literal_eval(f'b"{s}"').decode('utf-8'))
延伸
unicode_escape
In [1]: u'nihao 中国'.encode('raw_unicode_escape')
Out[1]: 'nihao \\u4e2d\\u56fd'
In [2]: u'nihao 中国'.encode('unicode_escape')
Out[2]: 'nihao \\u4e2d\\u56fd'
In [3]: re.sub('.', lambda x: r'\u%04X' % ord(x.group()), 'nihao 中国')
Out[3]: '\\u006E\\u0069\\u0068\\u0061\\u006F\\u0020\\u4E2D\\u56FD'
In [4]: ''.join(r'\u{:04X}'.format(ord(chr)) for chr in 'nihao 中国')
Out[4]: '\\u006E\\u0069\\u0068\\u0061\\u006F\\u0020\\u4E2D\\u56FD'
八进制和十六进制
s = "Client: \\344\\275\\240\\345\\245\\275\\357\\274\\214\\344\\270\\226\\347\\225\\214"
# b'Client: \xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c'
0o344 == 0xe4 == 228
Python pip pipx
2022-01-13
pipx 和 pip 一样,也是来自 PyPA 的项目。
PS: PyPA 的知名项目包括 pipenv, pip, pipx, virtualenv, flit, twine。
pipx 的作用是将包安装在虚拟环境中(利用标准库中的 venv)。用来安装一些 Python 写的工具就很好,不需要关心这些工具的代码时。
Python Poetry
2022-01-12
我研究了半天之后感觉无法掌握 poetry,决定放弃,还是用我的 Pipenv。
Poetry 是一个 Python 虚拟环境管理器。
Python 测试 pytest
2022-01-10
给 tmuxp 提了一个 Issue, 作者 @tony (Tony 老师?😜) 让我选择是自己写测试,还是他来写。
我表达我对 pytest 不熟之后,他给我一点建议:
所以我先学习学习,然后抽空把 test 自己写了。