176

https://golang.orgプログラムで取得したいとします。現在、golang.org (ssl) には不適切な証明書があり、*.appspot.comこれを実行すると次のように発行されます。

package main

import (
    "log"
    "net/http"
)

func main() {
    _, err := http.Get("https://golang.org/")
    if err != nil {
        log.Fatal(err)
    }
}

わかった(予想通り)

Get https://golang.org/: certificate is valid for *.appspot.com, *.*.appspot.com, appspot.com, not golang.org

ここで、この証明書を自分で信頼したいと思います (指紋などを検証できる自己発行の証明書を想像してください): 要求を作成して証明書を検証/信頼するにはどうすればよいですか?

おそらくopensslを使用して証明書をダウンロードし、ファイルにロードしてtls.Config構造体に入力する必要があります!?

4

6 に答える 6

357

セキュリティに関する注意: セキュリティ チェックを無効にすることは危険であり、避ける必要があります。

デフォルト クライアントのすべてのリクエストに対して、セキュリティ チェックをグローバルに無効にすることができます。

package main

import (
    "fmt"
    "net/http"
    "crypto/tls"
)

func main() {
    http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
    _, err := http.Get("https://golang.org/")
    if err != nil {
        fmt.Println(err)
    }
}

クライアントのセキュリティ チェックを無効にできます。

package main

import (
    "fmt"
    "net/http"
    "crypto/tls"
)

func main() {
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    }
    client := &http.Client{Transport: tr}
    _, err := client.Get("https://golang.org/")
    if err != nil {
        fmt.Println(err)
    }
}
于 2012-08-25T14:12:29.543 に答える