2017-11-18 15 views
0

https接続をurlに設定しています。接続のルートCA証明書を取得します

client.Get(url) 

サーバー証明書の確認に使用されたルート証明書を取得できますか。私はのConnectionState doesntのcrypto/tlsパッケージ

PeerCertificates   []*x509.Certificate // certificate chain presented by remote peer 
VerifiedChains    [][]*x509.Certificate // verified chains built from PeerCertificates 

は、信頼ストアから証明書を持っているようです。コード内のコメントとして

おかげ

答えて

3

はPeerCertificatesのみ、サーバーによって返された証明書が含まれて言います。 VerifiedChainsには、ローカル証明書ストア内の信頼できる証明書までのチェーンが含まれている必要があります(検証に成功したものとします)。

など。

client := &http.Client{} 

resp, err := client.Get("https://www.microsoft.com") 
if err != nil { 
    panic(err) 
} 

for _, cert := range resp.TLS.PeerCertificates { 
    fmt.Printf("Peer certificate \"%v\", ISSUED BY \"%v\"\n", cert.Subject.CommonName, cert.Issuer.CommonName) 
} 
for i, chain := range resp.TLS.VerifiedChains { 
    for _, cert := range chain { 
     fmt.Printf("Verified Chain %v Certificate \"%v\", ISSUED BY \"%v\"\n", i, cert.Subject.CommonName, cert.Issuer.CommonName) 
    } 
} 

そして、それは次のように表示されます:ここでは、簡単なサンプルコードスニペットがある

Peer certificate "www.microsoft.com", ISSUED BY "Symantec Class 3 Secure Server CA - G4" 
Peer certificate "Symantec Class 3 Secure Server CA - G4", ISSUED BY "VeriSign Class 3 Public Primary Certification Authority - G5" 
Verified Chain 0 Certificate "www.microsoft.com", ISSUED BY "Symantec Class 3 Secure Server CA - G4" 
Verified Chain 0 Certificate "Symantec Class 3 Secure Server CA - G4", ISSUED BY "VeriSign Class 3 Public Primary Certification Authority - G5" 
Verified Chain 0 Certificate "VeriSign Class 3 Public Primary Certification Authority - G5", ISSUED BY "VeriSign Class 3 Public Primary Certification Authority - G5" 

、Microsoft証明書がシマンテック社とMicrosoftサーバーによって署名されたことに注意して両方の証明書を返します - 独自のとSymantecの証明書それに署名するのに使用されます。両方の証明書がピア証明書と検証済みチェーンの両方に表示されているのがわかります。しかし、シマンテックの証明書は一般にトラストストアには存在しませんが、コンピュータのトラストストアにあるルート証明書であるVeriSign証明書によって署名されています。検証済みチェーンには、この信頼できる証明書が含まれています。

関連する問題