私はhttps://golang.org
をプログラマチックに取得したいと言います。現在golang.org(SSL)は、私が実行するので、とき*.appspot.com
に発行された不正な証明書を持っているこの:golang:不正な証明書でhttpsリクエストを行うにはどうすればよいですか?
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
は今、私はこれを信頼し得ます自分自身で証明書を発行することができます(私は指紋などの検証が可能な自己発行の証明書を想像してください):どのようにして証明書を検証し、信頼することができますか?
証明書をダウンロードしてファイルにロードし、tls.Config
構造体を入力するには、おそらくopensslを使用する必要があります。
これは「不良証明書」ではなく、別のCNを持つ証明書です。 InsecureSkipVerifyは正当な使用法ではありません。 tlsにServerNameを設定する必要があります。あなたが接続しようとしているものと一致するように設定します。このStackOverflowポストは、Goコードのこの大きなセキュリティホールをあらゆる場所に広げています。 InsecureSkipVerifyは、すべての証明書をチェックしません。必要なのは、CNがホスト名と一致しない場合でも、証明書が信頼できるエンティティによって正当に署名されたことを確認することです。トンネルとNATSは合法的にこの不一致を引き起こす可能性があります。 – Rob