簡體   English   中英

Go lang中的AWS API Gateway客戶端證書

[英]AWS API Gateway client certificates in Go lang

我正在嘗試確保AWS API Gateway與我的API端點服務之間​​的連接,正如他在其文檔中所描述的那樣: http//docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-client-side -ssl-authentication.html

AFAIK我需要復制證書形式AWS API Gateway並使用http.ListenAndServeTLS方法。 但是它接受兩個文件: keyFilecertFile func ListenAndServeTLS(addr, certFile, keyFile string, handler Handler)

當我點擊復制鏈接時(見下圖) AWS生成的證書示例

我得到的唯一的東西是這種格式的證書(我為了解釋目的縮短了它):

-----BEGIN CERTIFICATE-----
MIIC6TCCAdGgAwIBAgIJAKbyiCf2f5J2MA0GCSqGSIb3DQEBCwUAMDQxCzAJBgNV
fYe+dxR0PMFvfUpZaGgaY1ykQG1sNaw/b6NjNg9c1aEVSZ7b1eU/cBmb6XqHw0Ih
7yHtBm+p8Px4NMAT9YhytTxPRBYpApfUsfPMa3qfUWvvj4TD0LR6bW980bebyxUn
BigXToSFlPeiNGdU/Zpiw9crzplojNBFc=
-----END CERTIFICATE-----

所以我的問題是,我究竟需要配置ListenAndServeTLS方法以確保對我的服務的任何請求來自API網關? 在哪里可以找到私鑰? 這對我來說很困惑。

AWS提供的客戶端證書用於驗證向您的服務(AWS網關)發送請求的客戶端。

此證書不能用於啟動服務器,而是用於驗證請求。

請參閱下面的使用示例,未經測試的代碼,但作為主角。

func Hello(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "hello, world!\n")
}

func main() {
    http.HandleFunc("/hello", Hello)

    certBytes, err := ioutil.ReadFile("aws-gateway.pem")
    if err != nil {
        log.Fatal(err)
    }
    block, certBytes := pem.Decode(certBytes)

    cert, err := x509.ParseCertificate(block.Bytes)
    if err != nil {
       log.Fatal(err)
    }

    clientCertPool := x509.NewCertPool()
    clientCertPool.AddCerts(cert)

    tlsConfig := &tls.Config{
        ClientCAs: clientCertPool,
        // NoClientCert
        // RequestClientCert
        // RequireAnyClientCert
        // VerifyClientCertIfGiven
        // RequireAndVerifyClientCert
        ClientAuth: tls.RequireAndVerifyClientCert,
    }
    tlsConfig.BuildNameToCertificate()

    server := &http.Server{
        Addr:      ":8080",
        TLSConfig: tlsConfig,
    }

    server.ListenAndServeTLS("server.crt", "server.key")
}

這樣,您的服務將要求所有請求都提供證書,並將根據ClientCA池進行驗證。 當然,如果需要,您可以向客戶端池添加更多證書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM