TLS Certificate and Public Key Pinning

November 27, 2019
Servers

最近给 DoT 换了个 BuyPass 的证书,更新周期是 180 天。国内不准开 80/443,每次证书都要 DNS 手动加 TXT,隔俩月就得来一次,这次终于可以拖得更久一点了。

问题就这么来了。

同样是那个 Issue,开发者提供了直接使用 Pinset 来验证,即不使用 sni 进行验证的 workaround。

However note the ca_path/ca-file settings are not used for the Windows cert config in 1.4.1, the code currently just loads from the system root store. We'll need to fix this. But this release should allow using just pins for validation as a workaround.

然而新的问题来了,这个 Pin 怎么算??!!

网络上关于这个相关的问题比较系统性的解答只有 Mozilla 的一个页面,而其他的一些,如 StackOverflow 的回答,有些命令只适用于 ecc 或者 rsa,并不通用。弄得我之前还在想为啥不管用呢。。。

openssl s_client -servername example.com -connect example.com:853 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

从 rsa 私钥获取

openssl rsa -in rsa-key.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64

从 ecc 私钥获取

openssl ec -in ecc-key.key -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64

直接从证书获取

openssl x509 -in certificate.crt -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

从 csr 获取

openssl req -in signing-request.csr -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64

这样就可以在 Stubby 里配置

    - address_data: xx.xx.xx.xxx
      tls_port: 853
      tls_auth_name: "dot.example.com"
      tls_pubkey_pinset:
        - digest: "sha256"
          value: KTzZqUUYBPxCIvwzWTGdvxuYe0u/eAxKx0FTMyjLqAs=

至于设置 http,在 header 里面加一行就行,这个就不多说了。

说真的,Windows 平台还可以通过各种定制化来实现 DoT DoH,端口想用哪个就用哪个,Android 平台那可就蛋疼了啊。不仅只能 DoT,还只能用 853 端口,Google 你吔屎吧。

自力更生的 Seedbox 指南

September 22, 2019
Servers

nftables 上手小记

February 27, 2019
Servers

使用 Cron 设置定时任务

当初还是小白的时候看这个好高端的
Servers
comments powered by Disqus.
Can't load? Check your connectivity and try again.