为了账号安全,请及时绑定邮箱和手机立即绑定

Go - ReverseProxy to Apache 代理错误:x509:证书由未知机构签名

Go - ReverseProxy to Apache 代理错误:x509:证书由未知机构签名

Go
尚方宝剑之说 2021-11-29 16:12:28
我用 Go 编写的我自己的 ReverseProxy 有一些麻烦。我想将我的 Golang-Webserver 与我的 Apache Webserver 连接起来。我的 Apache 网络服务器也应该在 https 和反向代理上运行。所以我写了以下代码,但我总是收到错误:代理错误:x509:由未知机构签名的证书。那么apache必须使用与apache相同的证书还是有什么问题?这里有一些代码片段,但我认为没有 ssl 的证书有问题,一切正常:(func (p *Proxy) directorApache(req *http.Request) {    mainServer := fmt.Sprintf("%s:%d", Config.HostMain, Config.PortMain)    req.URL.Scheme = "https"    req.URL.Host = mainServer}func (p *Proxy) directorGo(req *http.Request) {    goServer := fmt.Sprintf("%s:%d", Config.GoHost, Config.GoPort)    req.URL.Scheme = "http"    req.URL.Host = goServer}func (p *Proxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) {    fmt.Println(req.URL.Path)    if p.isGoRequest(req) {        fmt.Println("GO")        p.goProxy.ServeHTTP(rw, req)        return    }    p.httpProxy.ServeHTTP(rw, req)}func main() {    var configPath = flag.String("conf", "./configReverse.json", "Path to the Json config file.")    flag.Parse()    proxy := New(*configPath)    cert, err := tls.LoadX509KeyPair(Config.PathCert, Config.PathPrivateKey)    if err != nil {        log.Fatalf("server: loadkeys: %s", err)    }    config := tls.Config{InsecureSkipVerify: true, Certificates: []tls.Certificate{cert}}    listener, err := net.Listen("tcp",    net.JoinHostPort(proxy.Host, strconv.Itoa(proxy.Port)))    if err != nil {        log.Fatalf("server: listen: %s", err)    }    log.Printf("server: listening on %s")    proxy.listener = tls.NewListener(listener, &config)    serverHTTPS := &http.Server{        Handler:   proxy.mux,        TLSConfig: &config,    }    if err := serverHTTPS.Serve(proxy.listener); err != nil {        log.Fatal("SERVER ERROR:", err)    }   }我尝试了很多并生成了几个自签名 SSL 证书,但没有解决我的问题。希望有人可以帮助我。
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

如果您在后端服务器中使用自签名证书,则需要告诉代理的 http 客户端不要验证该证书。


您可以覆盖 http 包的默认值:


http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true}

或者专门为您的代理创建一个新的传输:


httpProxy.Transport = &http.Transport{

    Proxy: http.ProxyFromEnvironment,

    Dial: (&net.Dialer{

        Timeout:   30 * time.Second,

        KeepAlive: 30 * time.Second,

    }).Dial,

    TLSHandshakeTimeout: 10 * time.Second,

    TLSClientConfig: &tls.Config{InsecureSkipVerify: true},

}


查看完整回答
反对 回复 2021-11-29
  • 1 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信