在Heroku服务器上部署golang martini HTTPS

时间:2015-05-28 08:40:57

标签: ssl heroku go martini

我正在尝试使用Golang-martini在Heroku上部署HTTPS网络端。

以下是我已经完成的清单:

  • 我已经在Heroku中启用了SSL端点。 (这是付费插件服务)
  • 我已经购买了我的CA证书密钥,可以部署Heroku。因此,heroku certs显示:(注意:公司名称/端点地址更改)

    端点||通用名称||到期||可信

    xxx.herokussl.com || server.sample.com || 2016-05-25 23:59 UTC ||真

这是我在Golang中的代码示例。

m := martini.Classic()
martini.Env = martini.Prod
m.Use(secure.Secure(secure.Options{
    SSLRedirect: false,
}))


//Because I want to keep HTTP and HTTPs enable.
go func() {
    if err := http.ListenAndServe(":"+os.Getenv("PORT"), m); err != nil {
        log.Println(err)
    }
}()

// HTTPS: 
if err := http.ListenAndServeTLS(":443", "server.crt", "server.key", m); err != nil {
    log.Println(err)
}

以下是我的问题:

  • 如果我在8443(或其他)中设置ListenAndServeTLS端口,则在尝试使用curl -vI https://server.sample.com进行测试时会显示错误。它将显示错误:

    " curl:(60)SSL证书问题:证书链无效"

  • 如果我将ListenAndServeTLS端口设置为443,则会显示:

    " listen tcp:443:bind:permission denied"

请告知我如何在Heroku上使用Go-martini部署HTTP,谢谢..

1 个答案:

答案 0 :(得分:3)

如果您要部署到Heroku,您的应用将不会提供HTTPS。 SSL连接将在Heroku的负载平衡器处终止,并且纯HTTP流量将转发到您的应用程序。

所以你要做的就是从环境中侦听端口上的HTTP。