继续在Go

时间:2016-06-07 23:12:04

标签: go

我一直这样做"随机" TLS握手时不时会出现错误,但我不知道具体发生这种情况时,它只会在日志中显示出来。

2016/06/07 18:27:05 http: TLS handshake error from 169.229.3.91:53522: tls: oversized record received with length 34831

我从namecheap.com获得了Comodo PositiveSSL证书。他们通过电子邮件发给我两个文件。他们称之为" Apache bundle"

的文件之一
Your Apache "bundle" file - mydomainname_com.ca-bundle

另一个特定于我的域名:

Your PositiveSSL Certificate - mydomainname_com.crt

我将这两个文件连接成一个ssl-bundle.crt文件。并将它与我在服务器上生成的私钥一起使用。

我像这样使用它们:

router := httprouter.New()

// ...

certificate := "/srv/ssl-bundle.crt"
privateKey := "/srv/mydomainname.com-2016.01.01.key"
log.Fatal(http.ListenAndServeTLS(":443", certificate, privateKey, router))

为什么我一直收到此TLS握手错误?我该怎么做才能防止这种情况发生?它并没有真正破坏网站或拒绝连接。它看起来并非如此。看起来事情正在发挥作用。但我仍然在我的日志中收到此错误或警告,我不知道该怎么办。我没有正确使用我从证书颁发者处获得的文件吗?

让我们假设Apache"捆绑" file - mydomainname_com.ca-bundle,看起来像这样:

-----BEGIN CERTIFICATE-----
(apache bundle block of string 1)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(apache bundle block of string 2)
-----END CERTIFICATE-----

基本上是生成字符串的两大块。

我的PositiveSSL证书 - mydomainname_com.crt看起来像这样:

-----BEGIN CERTIFICATE-----
(positivessl block of string)
-----END CERTIFICATE-----

按顺序将它们连接成一个ssl-bundle.crt文件:

-----BEGIN CERTIFICATE-----
(positivessl block of string)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(apache bundle block of string 1)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(apache bundle block of string 2)
-----END CERTIFICATE-----

在Chrome的网络标签中,它表示它是有效的https:

enter image description here

我该怎么办?

1 个答案:

答案 0 :(得分:1)

如果我没记错的话。这是远程主机不支持TLS连接的问题,即使它被告知要做。如果您记录这些连接,它可能是具有纯文本HTTP请求的爬虫。

<强> UDP

您的错误来自此处https://golang.org/src/crypto/tls/conn.go?s=17185:17253#L594,这意味着客户端会向您发送错误的密文(太大)。当你尝试从tls.Conn读取时(或者在握手期间,它从连接本身读取)就会发生这种情况。它返回tls.RecordHeaderError为错误,你可以解析它的Msg字段,寻找这个字符串。

无论如何,它发生是因为客户端发送格式错误的请求,它可能是损坏的数据包或客户端如何不尊重您的TLS配置,或portscanner,或不良代理,很多原因。但在那种情况下,连接是不可恢复的。

检查您提供的IP地址:http://169.229.3.91/,它说“这是来自加州大学伯克利分校的研究扫描机器。该机器定期对整个互联网进行扫描,因此您可能已被扫描为正在进行的研究项目。“