MCPcopy Create free account
hub / github.com/cloudnative-pg/cloudnative-pg / createAndSignPairWithValidity

Method createAndSignPairWithValidity

pkg/certs/certs.go:155–233  ·  view source on GitHub ↗
(
	host string,
	notBefore,
	notAfter time.Time,
	usage CertType,
	altDNSNames []string,
)

Source from the content-addressed store, hash-verified

153}
154
155func (pair KeyPair) createAndSignPairWithValidity(
156 host string,
157 notBefore,
158 notAfter time.Time,
159 usage CertType,
160 altDNSNames []string,
161) (*KeyPair, error) {
162 caCertificate, err := pair.ParseCertificate()
163 if err != nil {
164 return nil, err
165 }
166
167 caPrivateKey, err := pair.ParseECPrivateKey()
168 if err != nil {
169 return nil, err
170 }
171
172 // Generate a new private key
173 leafKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
174 if err != nil {
175 return nil, err
176 }
177
178 // Sign the public part of this key with the CA
179 serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
180 serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
181 if err != nil {
182 return nil, fmt.Errorf("can't generate serial number: %w", err)
183 }
184
185 leafTemplate := x509.Certificate{
186 SerialNumber: serialNumber,
187 NotBefore: notBefore,
188 NotAfter: notAfter,
189 BasicConstraintsValid: true,
190 IsCA: false,
191 Subject: pkix.Name{
192 CommonName: host,
193 },
194 DNSNames: altDNSNames,
195 }
196
197 leafTemplate.KeyUsage = x509.KeyUsageDigitalSignature | x509.KeyUsageKeyAgreement
198 switch usage {
199 case CertTypeClient:
200 leafTemplate.ExtKeyUsage = []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}
201
202 case CertTypeServer:
203 leafTemplate.ExtKeyUsage = []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}
204 leafTemplate.KeyUsage |= x509.KeyUsageKeyEncipherment
205
206 hosts := strings.Split(host, ",")
207 for _, h := range hosts {
208 if ip := net.ParseIP(h); ip != nil {
209 leafTemplate.IPAddresses = append(leafTemplate.IPAddresses, ip)
210 continue
211 }
212 if !slices.Contains(leafTemplate.DNSNames, h) {

Callers 3

CreateAndSignPairMethod · 0.95
certs_test.goFile · 0.80
k8s_test.goFile · 0.80

Calls 4

ParseCertificateMethod · 0.95
ParseECPrivateKeyMethod · 0.95
encodePrivateKeyFunction · 0.85
encodeCertificateFunction · 0.85

Tested by

no test coverage detected