[英]How to verify signed certificate timestamps (SCTs) in Go
我正在編寫一個 Go HTTP 客戶端應用程序,它需要驗證 SCT 才能利用證書透明度。 最新的 Go 版本是否自動支持此功能? 你如何做到這一點?
這里有兩個方面:
檢索 SCT很容易在標准庫中完成,每個RFC 6962有三種不同的情況:
所有這些都可以通過各自字段中的tls.ConnectionState獲得:
state.PeerCertificates[0].Extensions
,在 ID asn1.ObjectIdentifier{1, 3, 6, 1, 4, 1, 11129, 2, 4, 2}
的擴展下state.SignedCertificateTimestamps
state.OCSPResponse
那些仍然需要正確解析。
驗證 SCT比較棘手,並且不是標准庫的一部分。 這涉及以下內容:
這可以使用certificate-transparency-go實用程序拼湊在一起,但它們沒有包含將其用作庫的快速簡便的方法。
github.com/mberhault/go-sct提供了一個試圖讓這一切變得更容易的圖書館。 在 HTTPS GET 之后,可以按如下方式驗證 SCT:
免責聲明:我是github.com/mberhault/go-sct
的作者。
import "github.com/mberhault/go-sct"
// Verifying the SCTs after a HTTPS GET request.
resp, err := http.Get("https://www.certificate-transparency.org")
if err != nil {
panic("get failed " + err.Error())
}
err = sct.CheckConnectionState(resp.TLS)
if err != nil {
panic("SCT check failed " + err.Error())
}
可以對通過其他方法(在tls.Conn
上或在tls.Config.VerifyConnection
回調中)獲得的 tls.ConnectionState 執行相同的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.