Skip to content

Commit 2e52ff6

Browse files
authored
Merge pull request #90 from planetscale/dbussink/cleanup-ca-chain
Cleanup unneeded CA chain
2 parents a7a6e29 + 8ecf6f7 commit 2e52ff6

File tree

2 files changed

+15
-40
lines changed

2 files changed

+15
-40
lines changed

Diff for: planetscale/certs.go

+3-31
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ type CertificatesService interface {
3030

3131
type Cert struct {
3232
ClientCert tls.Certificate
33-
CACerts []*x509.Certificate
3433
AccessHost string
3534
Ports RemotePorts
3635
}
@@ -101,22 +100,16 @@ func (c *certificatesService) Create(ctx context.Context, r *CreateCertificateRe
101100
}
102101

103102
var cr struct {
104-
Certificate string `json:"certificate"`
105-
CertificateChain string `json:"certificate_chain"`
106-
AccessHost string `json:"access_host"`
107-
Ports map[string]int `json:"ports"`
103+
Certificate string `json:"certificate"`
104+
AccessHost string `json:"access_host"`
105+
Ports map[string]int `json:"ports"`
108106
}
109107

110108
err = c.client.do(ctx, req, &cr)
111109
if err != nil {
112110
return nil, err
113111
}
114112

115-
caCerts, err := parseCerts(cr.CertificateChain)
116-
if err != nil {
117-
return nil, fmt.Errorf("parsing certificate chain failed: %s", err)
118-
}
119-
120113
privateKeyBytes, err := x509.MarshalPKCS8PrivateKey(r.PrivateKey)
121114
if err != nil {
122115
return nil, fmt.Errorf("failed to marshal private key: %s", err)
@@ -136,31 +129,10 @@ func (c *certificatesService) Create(ctx context.Context, r *CreateCertificateRe
136129

137130
return &Cert{
138131
ClientCert: clientCert,
139-
CACerts: caCerts,
140132
AccessHost: cr.AccessHost,
141133
Ports: RemotePorts{
142134
Proxy: cr.Ports["proxy"],
143135
MySQL: cr.Ports["mysql-tls"],
144136
},
145137
}, nil
146138
}
147-
148-
func parseCerts(pemCert string) ([]*x509.Certificate, error) {
149-
perCertBlock := []byte(pemCert)
150-
var certs []*x509.Certificate
151-
152-
for {
153-
var certBlock *pem.Block
154-
certBlock, perCertBlock = pem.Decode(perCertBlock)
155-
if certBlock == nil {
156-
break
157-
}
158-
cert, err := x509.ParseCertificate(certBlock.Bytes)
159-
if err != nil {
160-
return nil, err
161-
}
162-
163-
certs = append(certs, cert)
164-
}
165-
return certs, nil
166-
}

Diff for: planetscale/certs_test.go

+12-9
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,12 @@ func TestCertificates_Create(t *testing.T) {
9595
w.WriteHeader(200)
9696

9797
var out = struct {
98-
Certificate string `json:"certificate"`
99-
CertificateChain string `json:"certificate_chain"`
100-
AccessHost string `json:"access_host"`
101-
Ports map[string]int `json:"ports"`
98+
Certificate string `json:"certificate"`
99+
AccessHost string `json:"access_host"`
100+
Ports map[string]int `json:"ports"`
102101
}{
103-
Certificate: testSignedPublicKey,
104-
CertificateChain: testCACert,
105-
AccessHost: accessHost,
102+
Certificate: testSignedPublicKey,
103+
AccessHost: accessHost,
106104
Ports: map[string]int{
107105
"mysql-tls": 3306,
108106
"proxy": 3307,
@@ -127,16 +125,21 @@ func TestCertificates_Create(t *testing.T) {
127125
c.Assert(err, qt.IsNil)
128126

129127
c.Assert(cert.AccessHost, qt.Equals, accessHost)
130-
c.Assert(cert.CACerts, qt.HasLen, 1)
131128
c.Assert(cert.ClientCert, qt.Not(qt.IsNil))
132129
c.Assert(cert.ClientCert.PrivateKey, qt.Not(qt.IsNil))
133130
c.Assert(cert.ClientCert.Certificate, qt.HasLen, 1)
134131

135132
ccert := cert.ClientCert.Certificate[0]
136133
ct, err := x509.ParseCertificate(ccert)
137134
c.Assert(err, qt.IsNil)
135+
136+
caBlock, _ := pem.Decode([]byte(testCACert))
137+
c.Assert(caBlock, qt.IsNotNil)
138+
ca, err := x509.ParseCertificate(caBlock.Bytes)
139+
c.Assert(err, qt.IsNil)
140+
138141
c.Assert(ct.Subject.CommonName, qt.Equals, "org-foo/db-foo/branch-foo")
139-
c.Assert(ct.Issuer.CommonName, qt.Equals, cert.CACerts[0].Issuer.CommonName)
142+
c.Assert(ct.Issuer.CommonName, qt.Equals, ca.Subject.CommonName)
140143

141144
c.Assert(cert.Ports.MySQL, qt.Equals, 3306)
142145
c.Assert(cert.Ports.Proxy, qt.Equals, 3307)

0 commit comments

Comments
 (0)