Skip to content

Instantly share code, notes, and snippets.

@003random
Last active June 25, 2019 18:34
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 003random/79cac76bf6d60e441c3954bc90dbb615 to your computer and use it in GitHub Desktop.
Save 003random/79cac76bf6d60e441c3954bc90dbb615 to your computer and use it in GitHub Desktop.
Displays SSL Certificate Info. Every property is either a string or a int. No objects, for easy storing.
package main
import (
"fmt"
"os"
"net"
"bytes"
"strings"
"encoding/pem"
"crypto/tls"
"crypto/x509"
)
func main() {
conn, err := tls.Dial("tcp", os.Args[1] + ":443", &tls.Config{
InsecureSkipVerify: true,
})
if err != nil {
fmt.Println(err)
return
}
var encodedCert bytes.Buffer
err = pem.Encode(&encodedCert, &pem.Block{
Type: "CERTIFICATE",
Bytes: conn.ConnectionState().PeerCertificates[0].Raw,
})
if err != nil {
fmt.Println(err)
return
}
p, err := x509.MarshalPKIXPublicKey(conn.ConnectionState().PeerCertificates[0].PublicKey)
if err != nil {
fmt.Println(err)
return
}
publicKey := string(pem.EncodeToMemory(&pem.Block{
Type: "PUBLIC KEY",
Bytes: p,
}))
fmt.Print("Issuer: ")
fmt.Print(conn.ConnectionState().PeerCertificates[0].Issuer.String())
fmt.Print("\nSubject: ")
fmt.Print(conn.ConnectionState().PeerCertificates[0].Subject.String())
fmt.Print("\nSerial Number: ")
fmt.Print(conn.ConnectionState().PeerCertificates[0].SerialNumber)
fmt.Print("\nSignature Algorithm: ")
fmt.Print(conn.ConnectionState().PeerCertificates[0].SignatureAlgorithm.String())
fmt.Print("\nVersion: ")
fmt.Print(conn.ConnectionState().PeerCertificates[0].Version)
fmt.Print("\nNot Before: ")
fmt.Print(conn.ConnectionState().PeerCertificates[0].NotBefore)
fmt.Print("\nNot After: ")
fmt.Print(conn.ConnectionState().PeerCertificates[0].NotAfter)
fmt.Print("\nEmail Addresses: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].EmailAddresses, ", "))
fmt.Print("\nIP Addresses: ")
fmt.Print(IPSliceToString(conn.ConnectionState().PeerCertificates[0].IPAddresses, ", "))
fmt.Print("\nPermitted DNS Domains: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].PermittedDNSDomains, ", "))
fmt.Print("\nExcluded DNS Domains: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].ExcludedDNSDomains, ", "))
fmt.Print("\nPermitted IP Ranges: ")
fmt.Print(IPRangeSliceToString(conn.ConnectionState().PeerCertificates[0].PermittedIPRanges, ", "))
fmt.Print("\nEXcluded IP Ranges: ")
fmt.Print(IPRangeSliceToString(conn.ConnectionState().PeerCertificates[0].ExcludedIPRanges, ", "))
fmt.Print("\nPermitted Email Addresses: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].PermittedEmailAddresses, ", "))
fmt.Print("\nExcluded Email Addresses: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].ExcludedEmailAddresses, ", "))
fmt.Print("\nPermitted URI Domains: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].PermittedURIDomains, ", "))
fmt.Print("\nExlucded URI Domains: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].ExcludedURIDomains, ", "))
fmt.Print("\nOCSP Server: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].OCSPServer, ", "))
fmt.Print("\nIssuing Certificate URL Server: ")
fmt.Print(strings.Join(conn.ConnectionState().PeerCertificates[0].IssuingCertificateURL, ", "))
fmt.Print("\nDNS Names: ")
fmt.Println(strings.Join(conn.ConnectionState().PeerCertificates[0].DNSNames, ", "))
fmt.Print("\nPublic Key Algorithm: ")
fmt.Print(conn.ConnectionState().PeerCertificates[0].PublicKeyAlgorithm.String())
fmt.Println("\nPublic Key: ")
fmt.Println(publicKey)
fmt.Println("Cert: ")
fmt.Println(encodedCert.String())
}
func IPSliceToString(slice []net.IP, delimiter string) string {
var s strings.Builder
for i, e := range slice {
s.WriteString(e.String())
if i != len(slice) - 1 {
s.WriteString(delimiter)
}
}
return s.String()
}
func IPRangeSliceToString(slice []*net.IPNet, delimiter string) string {
var s strings.Builder
for i, e := range slice {
s.WriteString(e.String())
if i != len(slice) - 1 {
s.WriteString(delimiter)
}
}
return s.String()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment