in internal/mock/certs.go [198:231]
func (ct *TLSCertificates) signWithClientKey(clientKey *rsa.PublicKey) ([]byte, error) {
notAfter := ct.clientCertExpires
if ct.clientCertExpires.IsZero() {
notAfter = time.Now().Add(1 * time.Hour)
}
// Create a signed cert from the client's public key.
cert := &x509.Certificate{ // TODO: Validate this format vs API
SerialNumber: &big.Int{},
Subject: pkix.Name{
Country: []string{"US"},
Organization: []string{"Google, Inc"},
CommonName: "Google Cloud SQL Client",
},
NotBefore: time.Now(),
NotAfter: notAfter,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth},
KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
BasicConstraintsValid: true,
}
certBytes, err := x509.CreateCertificate(rand.Reader, cert, ct.clientSigningCACertificate, clientKey, ct.clientSigningCaKey)
if err != nil {
return nil, err
}
certPEM := new(bytes.Buffer)
err = pem.Encode(certPEM, &pem.Block{
Type: "CERTIFICATE",
Bytes: certBytes,
})
if err != nil {
return nil, err
}
return certPEM.Bytes(), nil
}