Golang https服务器在字节数组方面传递certFile和kyeFile

Qia*_*hen 1 https go

func ListenAndServeTLS(addr string, certFile string, keyFile string, handler Handler) error
Run Code Online (Sandbox Code Playgroud)

以上是我在 Golang 中调用以启动 https 服务器的函数。它可以毫无问题地工作。然而,由于我有更多的部署,我不想把我的密钥文件放在任何地方。所以我想让程序从一个集中的地方下载密钥文件和证书文件。如果有一个类似的函数接收[]byte而不是string,我很容易做到这一点。但似乎我在文档中没有看到这样的功能。

Dav*_*e C 5

源码ListenAndServeTLS好像没有办法,总是调用tls.LoadX509KeyPair. 那真不幸; 可能值得提交功能请求。

同时,该ListenAndServeTLS方法并不大,并且(除了tcpKeepAliveListener)它不使用任何非导出的东西,因此很容易将该方法的主体复制到您自己的函数并替换Load509KeyPairtls.X509KeyPair,它确实采用[]bytePEM 编码数据而不是文件名。(或者也许换个tls.Certificate说法。)

例如像https://play.golang.org/p/ui_8dS8ouU

  • https://github.com/golang/go/commit/f81f6d6ee8a7f578ab19ccb8b7dbc3b6fff81aa0 由于这次提交,您可以传递空字符串来做到这一点 (8认同)
  • Maxux:太棒了,像魅力一样工作!所以只需在调用 srv.ListenAndServeTLS("", "") 之前定义 srv.TLSConfig = &tls.Config{Certificates: ... } (2认同)