in pkg/cas/certs.go [75:118]
func (r *casCertProvider) createCertReq(csrPEM []byte, lifetime time.Duration) *privatecapb.CreateCertificateRequest {
var isCA bool = false
rand.Seed(time.Now().UnixNano())
name := fmt.Sprintf("csr-workload-%s", rand.String(8))
// We use Certificate_Config option to ensure that we only request a certificate with CAS supported extensions/usages.
// CAS uses the PEM encoded CSR only for its public key and infers the certificate SAN (identity) of the workload through SPIFFE identity reflection
creq := &privatecapb.CreateCertificateRequest{
Parent: r.capool,
CertificateId: name,
Certificate: &privatecapb.Certificate{
Lifetime: durationpb.New(lifetime),
CertificateConfig: &privatecapb.Certificate_Config{
Config: &privatecapb.CertificateConfig{
SubjectConfig: &privatecapb.CertificateConfig_SubjectConfig{
Subject: &privatecapb.Subject{},
},
X509Config: &privatecapb.X509Parameters{
KeyUsage: &privatecapb.KeyUsage{
BaseKeyUsage: &privatecapb.KeyUsage_KeyUsageOptions{
DigitalSignature: true,
KeyEncipherment: true,
},
ExtendedKeyUsage: &privatecapb.KeyUsage_ExtendedKeyUsageOptions{
ServerAuth: true,
ClientAuth: true,
},
},
CaOptions: &privatecapb.X509Parameters_CaOptions{
IsCa: &isCA,
},
},
PublicKey: &privatecapb.PublicKey{
Format: privatecapb.PublicKey_PEM,
Key: csrPEM,
},
},
},
SubjectMode: privatecapb.SubjectRequestMode_REFLECTED_SPIFFE,
},
}
return creq
}