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

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

我是否可以在使用 MTLS 保護所有其他 HTTP 請求的同時,使用不安全的 GET HTTP 請求

我是否可以在使用 MTLS 保護所有其他 HTTP 請求的同時,使用不安全的 GET HTTP 請求

Go
滄海一幻覺 2022-10-04 19:27:06
我有一個用戈蘭語編寫的HTTP REST服務,演示了我正在嘗試的內容。我希望 GET 請求不安全,而所有其他 REST 請求都使用 MTLS 進行保護。我的實現已經使用了gin Web服務器庫,所以如果可能的話,我想堅持下去。我的問題是,我只能將tlsConfig應用于兩個組,或者兩者都不應用。我無法找到在小組級別應用它的方法。package mainimport (    "crypto/tls"    "crypto/x509"    "errors"    "fmt"    "io/ioutil"    "net/http"    "log"    "github.com/gin-gonic/gin")func main() {    router := gin.Default()    // Unprotected public router for GET requests    public := router.Group("/")    // Private router with MTLS    private := router.Group("/")    public.GET("/insecure-ping", func(c *gin.Context) {        c.JSON(200, gin.H{            "message": "insecure pong",        })    })    private.POST("/secure-ping", func(c *gin.Context) {        c.JSON(200, gin.H{            "message": "secure pong",        })    })    // Get the SystemCertPool, continue with an empty pool on error    rootCAs, err := x509.SystemCertPool()    if err != nil {        log.Fatal(err)    }    if rootCAs == nil {        rootCAs = x509.NewCertPool()    }    // Create a CA certificate pool and add cacert.pem to it    caCert, err := ioutil.ReadFile("cacert.pem")    if err != nil {        log.Fatal(err)    }    if ok := rootCAs.AppendCertsFromPEM(caCert); !ok {        err := errors.New("failed to append CA cert to local system certificate pool")        log.Fatal(err)    }    server := http.Server{        Addr:    fmt.Sprintf(":%v", 8080),        Handler: router,    }    server.TLSConfig = &tls.Config{        RootCAs: rootCAs,    }    err = server.ListenAndServeTLS("certificate.crt", "privateKey.key")    if err != nil {        log.Fatal(err)    }}
查看完整描述

1 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

只需創建兩個實例并同時運行它們,一個使用 配置相同的路由,另一個使用 配置。由于 HTTP 和 HTTPS 在不同的端口上運行,因此它們必須具有不同的偵聽器,但兩個偵聽器都可以使用相同(或不同)的處理程序。例如:ServerListenAndServeListenAndServeTLS


publicRouter := gin.Default()


// Unprotected public router for GET requests

public := publicRouter.Group("/")


public.GET("/insecure-ping", func(c *gin.Context) {

    c.JSON(200, gin.H{

        "message": "insecure pong",

    })

})


server := http.Server{

    Addr:    fmt.Sprintf(":%v", 8081), // Or whatever

    Handler: publicRouter,

}


go func() {

    err = tlsServer.ListenAndServe()

    if err != nil {

        log.Fatal(err)

    }

}()


// Private router with MTLS

router := gin.Default()

private := router.Group("/")


private.POST("/secure-ping", func(c *gin.Context) {

    c.JSON(200, gin.H{

        "message": "secure pong",

    })

})


// Get the SystemCertPool, continue with an empty pool on error

rootCAs, err := x509.SystemCertPool()

if err != nil {

    log.Fatal(err)

}

if rootCAs == nil {

    rootCAs = x509.NewCertPool()

}


// Create a CA certificate pool and add cacert.pem to it

caCert, err := ioutil.ReadFile("cacert.pem")

if err != nil {

    log.Fatal(err)

}


if ok := rootCAs.AppendCertsFromPEM(caCert); !ok {

    err := errors.New("failed to append CA cert to local system certificate pool")

    log.Fatal(err)

}


tlsServer := http.Server{

    Addr:    fmt.Sprintf(":%v", 8080),

    Handler: router,

}


tlsServer.TLSConfig = &tls.Config{

    RootCAs: rootCAs,

}


err = tlsServer.ListenAndServeTLS("certificate.crt", "privateKey.key")

if err != nil {

    log.Fatal(err)

}



查看完整回答
反對 回復 2022-10-04
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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