in dev-tools/v2tool/server/ca.go [38:96]
func NewCA() (*CertificateAuthority, error) {
ca := &x509.Certificate{
DNSNames: []string{"localhost"},
SerialNumber: big.NewInt(1653),
Subject: pkix.Name{
Organization: []string{"elastic-fleet"},
CommonName: "localhost",
},
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(10, 0, 0),
IsCA: true,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth, x509.ExtKeyUsageServerAuth},
KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign,
BasicConstraintsValid: true,
}
privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)
publicKey := &privateKey.PublicKey
caBytes, err := x509.CreateCertificate(rand.Reader, ca, ca, publicKey, privateKey)
if err != nil {
log.Println("create ca failed", err)
return nil, fmt.Errorf("ca creation failed: %w", err)
}
var pubKeyBytes, privateKeyBytes []byte
certOut := bytes.NewBuffer(pubKeyBytes)
keyOut := bytes.NewBuffer(privateKeyBytes)
// Public key
err = pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: caBytes})
if err != nil {
return nil, fmt.Errorf("signing ca certificate: %w", err)
}
// Private key
err = pem.Encode(keyOut, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)})
if err != nil {
return nil, fmt.Errorf("generating ca private key: %w", err)
}
// prepare tls
caPEM := certOut.Bytes()
caTLS, err := tls.X509KeyPair(caPEM, keyOut.Bytes())
if err != nil {
return nil, fmt.Errorf("generating ca x509 pairP: %w", err)
}
caCert, err := x509.ParseCertificate(caTLS.Certificate[0])
if err != nil {
return nil, fmt.Errorf("generating ca private key: %w", err)
}
return &CertificateAuthority{
privateKey: caTLS.PrivateKey,
caCert: caCert,
caPEM: caPEM,
}, nil
}