diff options
Diffstat (limited to 'tls-getcerts.go')
-rw-r--r-- | tls-getcerts.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tls-getcerts.go b/tls-getcerts.go new file mode 100644 index 0000000..b0d4533 --- /dev/null +++ b/tls-getcerts.go @@ -0,0 +1,35 @@ +package main + +import ( + "crypto/tls" + "crypto/x509" + "fmt" + "os" + "encoding/pem" +) + +func getcert(server string) (*x509.Certificate, error){ + conn, err := tls.Dial("tcp", fmt.Sprintf("%s:443", server), &tls.Config{ServerName: server}) + if err != nil { + return nil, err + } + defer conn.Close() + chain := conn.ConnectionState().PeerCertificates + return chain[len(chain)-2], nil +} + +func main() { + for _, server := range os.Args[1:] { + cert, err := getcert(server) + if err != nil { + fmt.Fprintf(os.Stderr, "Could not get certificate from server %q: %q\n", server, err) + os.Exit(1) + } + block := pem.Block{ + Type: "CERTIFICATE", + Headers: nil, + Bytes: cert.Raw, + } + pem.Encode(os.Stdout, &block) + } +} |