gpt4 book ai didi

ssl - 在等待 *tls.certificateStatusMsg 时收到 *tls.serverKeyExchangeMsg 类型的意外握手消息

转载 作者:IT王子 更新时间:2023-10-29 01:26:20 25 4
gpt4 key购买 nike

我需要检查一些网站的更新,我的脚本适用于我尝试过的所有网站,除了一个。

我很确定它与 TLS/SSL 相关,但我没有找到有关该错误的任何有用信息。

这是脚本:

package main

import (
"net/http"
"fmt"
"os"
"crypto/tls"
)

func main(){

client := &http.Client{
Transport: &http.Transport{
DisableKeepAlives: false,
MaxIdleConnsPerHost: 10,
TLSClientConfig: &tls.Config{
InsecureSkipVerify: true,
},
},
}

fmt.Println(client)

req, _ := http.NewRequest("GET", os.Args[1], nil)

_, err := client.Do(req)
if err != nil {
fmt.Println("Something bad happened: ", err)
}

}

这是输出:

[root@74dfbb491710 wd]# go run ssl.go https://google.com
&{0xc4200ce000 <nil> <nil> 0s}
[root@74dfbb491710 wd]# go run ssl.go https://jobs-eu.hudson.com
&{0xc4200e4000 <nil> <nil> 0s}
Something bad happened: Get https://jobs-eu.hudson.com: tls: received unexpected handshake message of type *tls.serverKeyExchangeMsg when waiting for *tls.certificateStatusMsg

我需要添加一些代码来处理握手吗?为什么该网站向我发送了意外消息?

最佳答案

这是 Go 的 TLS 握手处理中的错误。在 go 1.4 左右发送了一个补丁:https://github.com/golang/go/issues/8549 .但是,从 1.9.2 开始还没有应用。

补丁本身清楚地表明这是 Go 实现中的一个错误:

// RFC4366 on Certificate Status Request:       
// The server MAY return a "certificate_status" message.

而 go TLS 客户端基本上实现了“服务器必须返回 ...”。

我们可以用一个更小的例子重现这个问题:

package main

import (
"fmt"
"net/http"
"os"
)

func main() {
_, err := http.Get(os.Args[1])
fmt.Println(err)
}

并运行:

$ go run foo.go https://jobs-eu.hudson.com
Get https://jobs-eu.hudson.com: tls: received unexpected handshake message of type *tls.serverKeyExchangeMsg when waiting for *tls.certificateStatusMsg

将上述补丁应用于 go 1.9.2源和重建现在产生正确的功能:

~/tmp$ GOROOT=${HOME}/tmp/go go/bin/go run foo.go https://jobs-eu.hudson.com
<nil>

为了修补 Go,我执行了以下操作:(但您可能需要遵循 install from source 说明,它们更彻底)

  • 下载go 1.9.2 source tarball
  • 解压到~/tmp/go
  • 应用补丁:~/tmp/go$ patch -p1 < /tmp/OptionalCertificateStatus.patch
  • 重建:~/tmp/go$ GOROOT_BOOTSTRAP=<my previous go install> ./all.bash
  • 如上所述运行

我已 ping patch issue ,我很想知道为什么这个补丁没有被选中。

更新:补丁是now merged . 1.11 可能是拥有它的最早版本(我猜测基于 1.10 已经处于测试阶段的事实)。

关于ssl - 在等待 *tls.certificateStatusMsg 时收到 *tls.serverKeyExchangeMsg 类型的意外握手消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48074154/

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