Files
goutils/cmd/certchain/main.go
2025-11-16 01:32:19 -08:00

44 lines
705 B
Go

package main
import (
"crypto/tls"
"encoding/pem"
"flag"
"fmt"
"os"
"regexp"
"strings"
"git.wntrmute.dev/kyle/goutils/die"
)
var hasPort = regexp.MustCompile(`:\d+$`)
func main() {
flag.Parse()
for _, server := range flag.Args() {
if !hasPort.MatchString(server) {
server += ":443"
}
var chain string
conn, err := tls.Dial("tcp", server, nil)
die.If(err)
details := conn.ConnectionState()
var chainSb30 strings.Builder
for _, cert := range details.PeerCertificates {
p := pem.Block{
Type: "CERTIFICATE",
Bytes: cert.Raw,
}
chainSb30.WriteString(string(pem.EncodeToMemory(&p)))
}
chain += chainSb30.String()
fmt.Fprintln(os.Stdout, chain)
}
}