1.4 通信安全

1.4.1【必须】网络通信采用TLS方式

  • 明文传输的通信协议目前已被验证存在较大安全风险,被中间人劫持后可能导致许多安全风险,因此必须采用至少TLS的安全通信方式保证通信安全,例如gRPC/Websocket都使用TLS1.3。
  1. // good
  2. func main() {
  3. http.HandleFunc("/", func (w http.ResponseWriter, req *http.Request) {
  4. w.Header().Add("Strict-Transport-Security", "max-age=63072000; includeSubDomains")
  5. w.Write([]byte("This is an example server.\n"))
  6. })
  7. //服务器配置证书与私钥
  8. log.Fatal(http.ListenAndServeTLS(":443", "yourCert.pem", "yourKey.pem", nil))
  9. }

1.4.2【推荐】TLS启用证书验证

  • TLS证书应当是有效的、未过期的,且配置正确的域名,生产环境的服务端应启用证书验证。
  1. // bad
  2. import (
  3. "crypto/tls"
  4. "net/http"
  5. )
  6. func doAuthReq(authReq *http.Request) *http.Response {
  7. tr := &http.Transport{
  8. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
  9. }
  10. client := &http.Client{Transport: tr}
  11. res, _ := client.Do(authReq)
  12. return res
  13. }
  14. // good
  15. import (
  16. "crypto/tls"
  17. "net/http"
  18. )
  19. func doAuthReq(authReq *http.Request) *http.Response {
  20. tr := &http.Transport{
  21. TLSClientConfig: &tls.Config{InsecureSkipVerify: false},
  22. }
  23. client := &http.Client{Transport: tr}
  24. res, _ := client.Do(authReq)
  25. return res
  26. }