gpt4 book ai didi

ssl - 在 http.NewRequest 检查服务器 SSL/TLS 证书的指纹

转载 作者:IT王子 更新时间:2023-10-29 00:44:08 26 4
gpt4 key购买 nike

如何在 golang 中的 http 请求期间检查服务器 SSL/TLS 证书的指纹?

ruby code显示我想在 Go 中做什么:

  @verify_callback = proc do |preverify_ok, store_context|
if preverify_ok and store_context.error == 0
certificate = OpenSSL::X509::Certificate.new(store_context.chain[0])
fingerprint = Digest::SHA1.hexdigest(certificate.to_der).upcase.scan(/../).join(":")
$valid_fingerprints.include?(fingerprint)
else
false
end
end

最佳答案

一般来说,在 Go 中生成证书指纹的过程非常简单。如果您已经有一个 x509.Certificate 结构,存储在 cert 中,您需要做的就是

sha1Fingerprint := sha1.Sum(cert.Raw)

在请求完成后从 HTTP 响应结构中获取证书也很容易(使用 resp.TLS.PeerCertificates),但它似乎不是您所需要的。

如果您需要在建立 TLS 连接时访问服务器的证书,我认为您需要创建自己的 http.Transport 并将其交给 DialTLS< 的自定义实现。然后,您将在配置 http.Client 发出出站请求时使用该传输。

在您的自定义 DialTLS 函数中,您可以访问服务器证书链等连接状态信息,并且可以从那里执行 SHA1 指纹生成。

关于ssl - 在 http.NewRequest 检查服务器 SSL/TLS 证书的指纹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27006725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com