golang mitm 遇到的问题

最近在做一个 cache server,打算支持中间人方案。具体的实施就是自签一个 ca,提供给用户添加到系统进行信任,用这个 ca 去动态签发用户的目标站点证书。其实也就是一个 burp 的样子。

具体的代码实现会在下一篇文章中讲述,这篇只讨论遇到的问题。

1. SerialNumber 序列号是什么

https://security.stackexchange.com/questions/35691/what-is-the-difference-between-serial-number-and-thumbprint

这里面说的比较明白,序列号需要对于 CA 唯一,是一个 big int,我直接随机了。在写死的时候浏览器会对序列号报错。

2. 出现 common name not found

x509.Certificate.Subject.CommonName 不得为空,一般会为第一个 DNSName.

3. 浏览器证书信任了,但是在 MacOS curl 的时候提示 unable to get local issuer certificate

这个也找了老半天,最后根据经验猜测和搜索,认为是没有 bundle certificate,bundle 完错误消失。

4. 浏览器证书信任了,但是在 MacOS curl 的时候提示 self signed certificate in certificate chain

这个错误超级恶心,因为提示信息和错误不符,真正的原因可以使用 safari 来查看,会报告“证书不符合标准”,后来在 https://github.com/golang/go/issues/51991#issuecomment-1081998366 才看到一个可能的原因——签发时间过长(我一开始签发的是 10 年的)。

后来翻阅互联网找到了 apple 的政策,https://support.apple.com/en-us/HT210176,对于自签名证书最多允许 825 天的签发时间。同时对于公开可信证书,还有 398 天的限制以及 sct 要求。

5. 泛域名证书对于顶级域不生效

比如 *.net 是不对于 hunsh.net 生效的。


golang mitm 遇到的问题
https://hunsh.net/archives/148/
发布于
2023年8月4日
许可协议