#944 OpenSSL 检查 HTTPS 和 SMTP (STARTTLS) 连接
OpenSSL HTTPS SMTP TLS 2023-12-10HTTPS
echo | openssl s_client -connect sendcloud.net:443
echo | openssl s_client -showcerts -connect sendcloud.net:443
echo | openssl s_client -showcerts -debug -connect sendcloud.net:443 >/dev/null
echo | openssl s_client -showcerts -debug -connect sendcloud.net:443 2>/dev/null | openssl x509 -inform pem -noout -text
# 导出证书
openssl s_client -connect sendcloud.net:443 </dev/null | openssl x509 -outform pem > sendcloud.net.cer
# 导出所有证书
openssl s_client -showcerts -connect sendcloud.net:443 </dev/null | sed -n '/-----BEGIN/,/-----END/p' > sendcloud.net.cer
# 查看证书信息
openssl s_client -showcerts -connect sendcloud.net:443 </dev/null | sed -n '/-----BEGIN/,/-----END/p' | openssl x509 -noout -text
# 查看证书链上所有证书信息
OLDIFS=$IFS; IFS=':' certs=$(openssl s_client -showcerts -connect sendcloud.net:443 2>/dev/null </dev/null | sed -n '/-----BEGIN/,/-----END/{/-----BEGIN/ s/^/:/; p}'); for cert in ${certs#:}; do echo $cert | openssl x509 -noout -text; done; IFS=$OLDIFS
# # 查看证书链上所有证书 OCSP URI
OLDIFS=$IFS; IFS=':' certs=$(openssl s_client -showcerts -connect sendcloud.net:443 2>/dev/null </dev/null | sed -n '/-----BEGIN/,/-----END/{/-----BEGIN/ s/^/:/; p}'); for cert in ${certs#:}; do echo $cert | openssl x509 -noout -ocsp_uri; done; IFS=$OLDIFS
# -ocsp_uri
# -serial
# -fingerprint
# -subject
# 检查证书在 30 天之后有没有过期
openssl s_client -connect sendcloud.net:443 2>/dev/null </dev/null | openssl x509 -outform pem | openssl x509 -noout -checkend 2592000
# -checkend intmax Check whether the cert expires in the next arg seconds
# -checkhost val Check certificate matches host
# -checkemail val Check certificate matches email
# -checkip val Check certificate matches ipaddr
echo | openssl s_client -verify_hostname baidu.com -connect sendcloud.net:443 1>/dev/null
SMTP
一样的,只是加 -starttls smtp
。
echo | openssl s_client -connect smtp.sendcloud.net:25 -starttls smtp
echo | openssl s_client -connect smtp.sendcloud.net:25 -starttls smtp 2>/dev/null | openssl x509 -inform pem -noout -text
其他
校验证书
# echo | openssl s_client -connect smtp.sendcloud.net:25 -starttls smtp 2>/dev/null | openssl verify
# echo | openssl s_client -showcerts -connect smtp.sendcloud.net:25 -starttls smtp 2>/dev/null | openssl verify
echo | openssl s_client -showcerts -connect smtp.sendcloud.net:25 -starttls smtp 2>/dev/null | sed -n '/-----BEGIN/,/-----END/p' > smtp.sendcloud.net.cer
openssl verify -CAfile smtp.sendcloud.net.cer smtp.sendcloud.net.cer
IMAP
echo | openssl s_client -connect imap.126.com:143 -starttls imap
测试 TLS 1.3 支持
echo | openssl s_client -connect smtp.sendcloud.net:25 -starttls smtp -tls1_3
OCSP 检测
用上面的 sendcloud.net.cer 举例,需要将文件中第一个证书和下面的其他证书拆开,分成 sendcloud.cer 和 chain.cer
openssl x509 -noout -ocsp_uri -in sendcloud.cer
# http://ocsp.sectigo.com
openssl ocsp -issuer chain.cer -cert sendcloud.cer -text -url http://ocsp.sectigo.com
# Error querying OCSP responder
# 140052849842064:error:27076072:OCSP routines:PARSE_HTTP_LINE1:server response error:ocsp_ht.c:314:Code=400,Reason=Bad Request
遇到上面报错是因为 OSCP 客户端使用 HTTP 1.0,但是服务器端现在都是 1.1,需要 Host 头。
$ openssl ocsp -issuer chain.cer -cert sendcloud.cer -text -url http://ocsp.sectigo.com -header "HOST" "ocsp.sectigo.com"
OCSP Request Data:
Version: 1 (0x0)
Requestor List:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 21F3459A10CAA6C84BDA1E3962B127D5338A7C48
Issuer Key Hash: 17D9D6252767F931C24943D93036448C6CA94FEB
Serial Number: DB5F1FFAFFB770CA38E8120A6121852E
Request Extensions:
OCSP Nonce:
0410F47624DDB17E9703BFCDCC96E983018B
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: 17D9D6252767F931C24943D93036448C6CA94FEB
Produced At: Dec 9 07:52:17 2023 GMT
Responses:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 21F3459A10CAA6C84BDA1E3962B127D5338A7C48
Issuer Key Hash: 17D9D6252767F931C24943D93036448C6CA94FEB
Serial Number: DB5F1FFAFFB770CA38E8120A6121852E
Cert Status: good
This Update: Dec 9 07:52:17 2023 GMT
Next Update: Dec 16 07:52:16 2023 GMT
Signature Algorithm: sha256WithRSAEncryption
5f:65:bf:3e:d1:8c:16:63:76:bc:83:82:b8:a3:67:54:1d:26:
78:e1:b9:7f:64:c7:61:bc:40:0d:4b:b0:7f:49:29:bc:38:48:
43:87:a5:dd:a1:e6:b4:74:ce:58:44:24:30:c3:0d:f5:ab:da:
8c:f9:25:0e:3e:e2:fe:5a:64:5f:32:d9:f5:15:6f:0c:0c:89:
97:30:f6:6c:07:56:6e:54:81:4f:d3:22:1f:16:94:a0:2b:99:
49:2f:2c:0f:c8:b7:b4:90:2f:60:01:54:9c:f9:34:c0:c6:e1:
09:3f:93:d4:dd:a7:0b:34:bb:cb:4b:06:c3:5a:8c:fc:dc:85:
4f:9d:a7:08:c3:22:98:06:b8:b9:d4:47:51:9c:36:43:f3:53:
db:f5:d1:2f:4c:a6:97:c7:5a:f5:15:04:c4:94:a4:9e:95:4c:
03:fd:5a:60:b8:4c:75:e8:02:74:e4:80:1c:8f:17:85:8a:a2:
9e:b9:5d:74:4a:2e:7d:9f:5e:d8:40:6b:60:63:74:3f:dc:11:
d4:f6:b4:86:6e:6b:83:8a:ff:57:cf:b4:41:1f:a3:66:b2:e2:
00:6a:3a:33:dc:c3:3d:13:1d:37:97:d9:9c:d9:b5:9b:24:74:
24:82:7a:f9:ca:51:b3:39:24:e3:90:f4:ff:4b:8e:be:f8:0f:
ec:7a:16:55
WARNING: no nonce in response
Response Verify Failure
139766041024400:error:27069076:OCSP routines:OCSP_basic_verify:signer certificate not found:ocsp_vfy.c:92:
sendcloud.cer: good
This Update: Dec 9 07:52:17 2023 GMT
Next Update: Dec 16 07:52:16 2023 GMT
#943 异常流量监控
开发者 软件设计 2023-12-09突然来了大量客户请求,我们无法判断这些请求是正常的,还是客户被攻击所致。为了避免产生严重客损,我们需要识别到这些突然出现的流量高峰,并进行通知以及执行一些处理措施。
客户配置
比如:
request_limit = {
rate: {
// 客户配置
3600: 1000, // 指定 API 1 小时之内的请求量上限
86400: 8000, // 指定 API 1 天之内的请求量上限
},
rate_computed: {
// 根据之前的请求情况,结合客户配置计算出来的值(不小于客户配置)
3600: 1000,
86400: 8000,
},
strategy: {
times_to_notify: 1, // 连续触发几次之后通知
times_to_suspend: 3, // 连续触发几次之后暂停
times_to_intercept: 12, // 连续触发几次之后拦截请求
},
};
- 默认给所有客户开启最近 1 小时和最近 24 小时的限制。
- 速率控制以小时为单位(
[1, 24]
)
定时检查
- 定时执行
5 10 15 20 25 30
35 40 45 50 55 0
-
查询过去 1 天有请求的客户清单,根据系统参数(可能还有业务上其他条件)跳过忽略检查客户
-
逐个客户查询最近 5 分钟内的请求量,并将 5 分钟数据统计到小时内
然后逐个时间区间配置,判断总请求量是否超出预设值
end_min = (minute // 5) * 5
start_min = end_minute - 5
- 如果流量异常,按照指定策略触发相关事件
客户处理
PS:这个机制的目的是处理异常流量,如果正常的请求量上来了应该调整客户配置。
- 警告页面给出客户过去的请求情况,标出告警时间段的数据
- 让客户选择处理方案:
- 忽略并继续
- 清空暂停队列并继续
可以查看下载受影响的请求信息 - 暂不处理
- 往后 24 小时之内,下一次触发告警的数量,提供一个默认值(当前请求量的 1.5 倍)
另一种思路:如果客户选择继续请求,不用填下一次告警的数量,后面计算的时候直接跳过过去一段时间(比如 6 小时)的请求量。
#942 Python UCS 相关问题
Python 字符编码 2023-12-08老项目中有时可以看到报错:unichr() arg not in range(0x10000) (narrow Python build)
经过一番调研之后,发现是和 Python 内部 Unicode 编码有关。
#941 武汉市高中列表
个人 2023-12-07根据教育局的文件整理出来的一个高中清单。
#940 震惊!我的静态博客涉黄了!
个人 2023-12-04早上接到辖区派出所电话,说我的这个博客涉黄。
我这个可是个静态博客,都是写技术文章和个人想法,可以说是干干净净的,也没有评论,怎么就和黄色沾边了呢?
而且也没有几个人访问。根据百度统计,平均每天大概 60 个访问。
按照民警要求,本周三上午我去派出所说明情况。再看吧!
我要民警提供相关信息,方便我排查处理问题,民警说这是机密信息,不能给我看。
怀疑是外链的问题。外链网站关闭,域名过期被别人接手做坏事。
我写了个脚本爬出我博客中引用的外链,解析出 800 多域名,逐个访问,获取 Title,也没有发现什么黄色内容。
还是等周三看看怎么回事吧!
更新:
- 12/06 去了派出所做了笔录,说明情况,说明以后如何整改,花了一个半小时,最后给我一个警告处罚。
在派出所了解到(民警拿他的手机给我看了一下网警的通知),有一个页面上有一个连接打开是黄色网站。
根据这些信息,我直接在手机上找到 《免费的编程书籍》 这个页面,打开相关链接(深入理解 PHP 内核),果然变成了黄色网站。 - 12/07 更新页面,去掉了这个链接。
#939 移除图片上的附加信息
图像处理 2023-12-03使用 imagemagick 来做图片处理:
for file in *.jpg *.png; do
exif=$(identify -format "%[EXIF:*]" "$file")
if [ -n "$exif" ]; then
echo "Handling $file"
echo $exif
mogrify -strip "$file"
else
# echo "Ignore $file"
:
fi
done
Exif 相关信息在我之前的文章《Linux 工具箱: exiftool》中有提到。
#938 数组按行访问和按列访问速度有这么大差异?
Clang Golang 2023-12-01看到一片技术文章《改了一行代码,数组遍历耗时从 10.3 秒降到了 0.5 秒!》,试验了一下。
#937 信创是什么
开发者 2023-11-30https://www.cnxclm.com/read-736-1.html
信创,全名:信息技术应用创新,是政府的一个计划,目的是推广国产 IT 技术应用,最终实现 IT 领域自主可控。
这个计划是什么时候开始的我不清楚,确实是自从美国开始对中国展开贸易战之后,这个词才广为人知,也就是近几年的事情。
目前主要是党政军相关项目国产化,以后可能会推广到国企与事业单位。
信创项目的规模不断扩大,自 2019 年起大幅加速。
从 2011 年到 2018 年,信创项目的政府合同规模达到 1.99 亿人民币(合 2852 万美元);
2020 年跃升至 279.2 亿人民币(合 40 亿美元),
2021 年初至 2022 年 11 月为 184.5 亿人民币(合 26.4 亿美元)。
预计 2025 年,这一领域估值将达 2 万亿元(1250 亿美元)。
内容
- 基础设施:CPU、芯片、服务器、交换机、路由器
- 基础软件:操作系统、数据库、大数据、中间件、云平台(如 IaaS、PaaS 和低代码平台)
- 应用软件:办公软件、通用软件、行业软件等
- 信息安全
信创工委会
2016 年,信创工委会(信息技术应用创新工作委员会)成立。
包括很多知名国产厂商都在信创委员会中,比如:
- 龙芯(CPU)
- 浪潮(服务器)
- 深信服
- 华为
- 麒麟软件(操作系统)
- WPS
- 奇虎 360
- 奇安信(360 企业安全)
具体哪些产品符合信创要求,似乎也没有看到一个公开的清单。
项目
-
操作系统
-
麒麟 Kylin
- 统信 UOS
- 红旗
-
华为 EularOS
-
数据库
-
武汉达梦
-
其他
-
东方通
#936 StackOverflow 上被复制最多的代码
开发者 Java 2023-11-28根据《The most copied StackOverflow snippet of all time is flawed!》,StackOverflow 上被复制最多的一段代码来自问题 How can I convert byte size into a human-readable format in Java?,也就是将字节数转换成可读格式,比如 1024 -> 1KB 这样。