64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package main
|
||
|
||
import (
|
||
"crypto/tls"
|
||
"crypto/x509"
|
||
"fmt"
|
||
"os"
|
||
)
|
||
|
||
func main() {
|
||
if len(os.Args) != 2 {
|
||
fmt.Printf("Usage: %s ‹hostname:port>\n", os.Args[0])
|
||
os.Exit(1)
|
||
}
|
||
|
||
hostPort := os.Args[1]
|
||
conn, err := tls.Dial("tcp", hostPort, &tls.Config{
|
||
InsecureSkipVerify: true,
|
||
})
|
||
|
||
if err != nil {
|
||
fmt.Printf("Failed to connect to the TLS server: %v\n", err)
|
||
os.Exit(1)
|
||
}
|
||
defer conn.Close()
|
||
state := conn.ConnectionState()
|
||
printConnectionDetails(state)
|
||
}
|
||
|
||
func printConnectionDetails(state tls.ConnectionState) {
|
||
version := tlsVersion(state.Version)
|
||
cipherSuite := tls.CipherSuiteName(state.CipherSuite)
|
||
fmt.Printf("TLS Version: %s\n", version)
|
||
fmt.Printf("Cipher Suite: %s\n", cipherSuite)
|
||
printPeerCertificates(state.PeerCertificates)
|
||
}
|
||
|
||
func tlsVersion(version uint16) string {
|
||
switch version {
|
||
case tls.VersionTLS13:
|
||
return "TLS 1.3"
|
||
case tls.VersionTLS12:
|
||
|
||
return "TLS 1.2"
|
||
case tls.VersionTLS11:
|
||
return "TLS 1.1"
|
||
case tls.VersionTLS10:
|
||
return "TLS 1.0"
|
||
default:
|
||
return "Unknown"
|
||
}
|
||
}
|
||
|
||
func printPeerCertificates(certificates []*x509.Certificate) {
|
||
for i, cert := range certificates {
|
||
fmt.Printf("Certificate %d\n", i+1)
|
||
fmt.Printf("\tSubject: %s\n", cert.Subject)
|
||
fmt.Printf("\tIssuer: %s\n", cert.Issuer)
|
||
fmt.Printf("\tDNS Names: %v\n", cert.DNSNames)
|
||
fmt.Printf("\tNot Before: %s\n:", cert.NotBefore)
|
||
fmt.Printf("\tNot After: %s\n", cert.NotAfter)
|
||
}
|
||
}
|