亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓 Go 接受用于 TLS 客戶端身份驗證的自簽名證書?

如何讓 Go 接受用于 TLS 客戶端身份驗證的自簽名證書?

Go
翻閱古今 2021-12-27 18:25:04
我正在使用 AWS API Gateway 和 Go 后端。為了確保所有連接都通過 API Gateway,我需要使用 TLS 客戶端身份驗證(又名雙向身份驗證,相互身份驗證)。原則上,這適用于以下內容:func enableClientAuth(server *http.Server, clientCertFile string) error {    clientCert, err := ioutil.ReadFile(clientCertFile)    if err != nil {        return err    }    caCertPool := x509.NewCertPool()    caCertPool.AppendCertsFromPEM(clientCert)    tlsConfig := &tls.Config{        ClientAuth: tls.RequireAndVerifyClientCert,        ClientCAs:  caCertPool,    }    tlsConfig.BuildNameToCertificate()    server.TLSConfig = tlsConfig    return nil}我遇到的問題是這個錯誤:tls:無法驗證客戶端的證書:x509:由未知機構簽署的證書(可能是因為“x509:無效簽名:父證書無法簽署此類證書”,同時嘗試驗證候選機構證書“ApiGateway”)這似乎是因為客戶端證書是自簽名的,但不是CA證書,Go不會接受簽名。(這不是違背了自簽名證書的目的嗎?我見過的大多數自簽名證書都不是 CA 證書。)不幸的是,我無法控制客戶端證書的生成或發送方式;這一切都由 AWS 完成。我可以做些什么來在 ClientCAs 證書池中獲取證書,從而導致 Go 接受 API Gateway 客戶端證書?
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

即我需要在加載客戶端證書結構后對其進行修改。這需要解碼 PEM 并解析出證書。對于 API Gateway 客戶端證書,我必須將BasicConstraintsValidand設置IsCA為 true 和KeyUsageto KeyUsageCertSign; 對于我本地生成的證書,我只需要后兩個。enableClientAuth()在我的問題中修改func:


func enableClientAuth(server *http.Server, clientCertFile string) error {

    pemBytes, err := ioutil.ReadFile(clientCertFile)

    if err != nil {

        return err

    }


    pemBlock, _ := pem.Decode(pemBytes)

    clientCert, err := x509.ParseCertificate(pemBlock.Bytes)

    if err != nil {

        return err

    }


    clientCert.BasicConstraintsValid = true

    clientCert.IsCA = true

    clientCert.KeyUsage = x509.KeyUsageCertSign


    caCertPool := x509.NewCertPool()

    caCertPool.AddCert(clientCert)


    tlsConfig := &tls.Config{

        ClientAuth: tls.RequireAndVerifyClientCert,

        ClientCAs:  caCertPool,

    }

    tlsConfig.BuildNameToCertificate()

    server.TLSConfig = tlsConfig

    return nil

}


查看完整回答
反對 回復 2021-12-27
  • 1 回答
  • 0 關注
  • 330 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號