...
1
16
17 package cert
18
19 import (
20 "crypto/tls"
21 "crypto/x509"
22 "fmt"
23 "net/url"
24 "strings"
25 )
26
27
28
29 func GetClientCANames(apiHost string) ([]string, error) {
30
31 acceptableCAs := []string{}
32 tlsConfig := &tls.Config{
33 InsecureSkipVerify: true,
34 GetClientCertificate: func(hello *tls.CertificateRequestInfo) (*tls.Certificate, error) {
35 acceptableCAs = []string{}
36 for _, curr := range hello.AcceptableCAs {
37 acceptableCAs = append(acceptableCAs, string(curr))
38 }
39 return &tls.Certificate{}, nil
40 },
41 }
42
43 conn, err := tls.Dial("tcp", apiHost, tlsConfig)
44 if err != nil {
45 return nil, err
46 }
47 if err := conn.Close(); err != nil {
48 return nil, err
49 }
50
51 return acceptableCAs, nil
52 }
53
54
55 func GetClientCANamesForURL(kubeConfigURL string) ([]string, error) {
56 apiserverURL, err := url.Parse(kubeConfigURL)
57 if err != nil {
58 return nil, err
59 }
60 return GetClientCANames(apiserverURL.Host)
61 }
62
63
64
65 func GetServingCertificates(apiHost, serverName string) ([]*x509.Certificate, [][]byte, error) {
66 tlsConfig := &tls.Config{
67 InsecureSkipVerify: true,
68 }
69
70 if len(serverName) > 0 {
71 tlsConfig.ServerName = serverName
72 }
73
74 conn, err := tls.Dial("tcp", apiHost, tlsConfig)
75 if err != nil {
76 return nil, nil, err
77 }
78 if err = conn.Close(); err != nil {
79 return nil, nil, fmt.Errorf("failed to close connection : %v", err)
80 }
81
82 peerCerts := conn.ConnectionState().PeerCertificates
83 peerCertBytes := [][]byte{}
84 for _, a := range peerCerts {
85 actualCert, err := EncodeCertificates(a)
86 if err != nil {
87 return nil, nil, err
88 }
89 peerCertBytes = append(peerCertBytes, []byte(strings.TrimSpace(string(actualCert))))
90 }
91
92 return peerCerts, peerCertBytes, err
93 }
94
95
96 func GetServingCertificatesForURL(kubeConfigURL, serverName string) ([]*x509.Certificate, [][]byte, error) {
97 apiserverURL, err := url.Parse(kubeConfigURL)
98 if err != nil {
99 return nil, nil, err
100 }
101 return GetServingCertificates(apiserverURL.Host, serverName)
102 }
103
View as plain text