【问题标题】:Does golang TLS support IE8?golang TLS 是否支持 IE8?
【发布时间】:2012-09-20 11:55:22
【问题描述】:

最新的 Chrome/IE9/Firefox 一切正常。 IE8 抱怨该页面无法显示,并且看起来连接已中止。这是快速测试代码。

package main

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

type Handler struct {
}

func (this *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, %q", r.URL.Path)
}

func main() {
    handler := &Handler{}
    ss := &http.Server{
        Addr: ":443",
        Handler: handler,
        ReadTimeout: 10 * time.Second,
        WriteTimeout: 10 * time.Second,
        MaxHeaderBytes: 1 << 20,
    }
    ss.ListenAndServeTLS("cert.pem", "key.pem")
}

请注意,“cert.pem”和“key.pem”是由“crypto/tls/generate_cert.go”生成的。我尝试了一个真正的证书,它也不起作用。

【问题讨论】:

  • 刚刚注意到 iPad 也有同样的问题。
  • 如果您能做出正确的(如果可能的话,详细说明)答案并接受它会更好更清晰。

标签: go


【解决方案1】:

由于 OP 没有给出正确的答案,因此从问题中移出

这个问题可以通过这个补丁解决,“0001-Allow-SSLv2-compatible-client-hello-so-SSLv2-compati.patch”,问题http://code.google.com/p/go/issues/detail?id=3930

但是,此修订版http://code.google.com/p/go/source/detail?r=8048fe8f6f4b 并没有解决问题。

【讨论】:

    【解决方案2】:

    TLS 是一个标准, 所以没有“IE8 的 TLS”之类的东西。

    我想问题在于 IE8 不信任您的(据说是自签名的)证书。所以我认为你可以在 SO 上的this thread 中找到答案。

    您也可以拥有正确签名的证书,但运行此 IE8 实例的计算机上的证书存储没有导入您的 CA 的证书(或者如果您的证书已由下级 CA 签名,则证书的整个信任链)并因此受到信任。在这种情况下,您应该这样做——获取您的 CA(或整个 CA 链,如果有的话)的证书并将其导入客户端计算机上。

    【讨论】:

    • iPad 处理起来可能比较棘手,因为通常很难将内容上传到它上面。我曾经成功地将我的 CA 证书导入到用户的 iPad,方法是将该证书生成的 #PKCS12 文件上传到受信任的本地网络服务器,然后在 iPad 上的 Safari 中导航到其 URL——下载后,它会自动提供导入该证书.
    • 感谢您的回复。我实际上的意思是 golang 标准库中 TLS 实现的当前状态,但是对于令人困惑的表达方式还是很抱歉。我从一个 golang 论坛了解到问题是由于 SSLv2 握手响应造成的。这是相关的问题线程,code.google.com/p/go/issues/detail?id=3930
    猜你喜欢
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2012-08-04
    • 2016-09-12
    • 1970-01-01
    相关资源
    最近更新 更多