@@ -29,6 +29,8 @@ import (
2929
3030 cmapi "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
3131 cmmeta "github.com/cert-manager/cert-manager/pkg/apis/meta/v1"
32+ cmpki "github.com/cert-manager/cert-manager/pkg/util/pki"
33+
3234 "github.com/cert-manager/csi-lib/manager"
3335 "github.com/cert-manager/csi-lib/metadata"
3436
@@ -56,32 +58,58 @@ func RequestForMetadata(meta metadata.Metadata) (*manager.CertificateRequestBund
5658 }
5759 }
5860
59- commonName , err := expand (meta , attrs [csiapi .CommonNameKey ])
60- if err != nil {
61- return nil , fmt .Errorf ("%q: %w" , csiapi .CommonNameKey , err )
61+ var request = & x509.CertificateRequest {}
62+ if lSubjStr , ok := attrs [csiapi .LiteralSubjectKey ]; ok && len (lSubjStr ) > 0 {
63+ lSubjStr , err = expand (meta , lSubjStr )
64+ if err != nil {
65+ return nil , fmt .Errorf ("%q: %w" , csiapi .LiteralSubjectKey , err )
66+ }
67+ request .RawSubject , err = cmpki .ParseSubjectStringToRawDerBytes (lSubjStr )
68+ if err != nil {
69+ return nil , fmt .Errorf ("%q: %w" , csiapi .LiteralSubjectKey , err )
70+ }
71+ } else {
72+ request .Subject = pkix.Name {}
73+ request .Subject .CommonName , err = expand (meta , attrs [csiapi .CommonNameKey ])
74+ if err != nil {
75+ return nil , fmt .Errorf ("%q: %w" , csiapi .CommonNameKey , err )
76+ }
77+ if len (attrs [csiapi .SerialNumberKey ]) > 0 {
78+ request .Subject .SerialNumber = attrs [csiapi .SerialNumberKey ]
79+ }
80+ for k , v := range map [* []string ]string {
81+ & request .Subject .Organization : csiapi .OrganizationsKey ,
82+ & request .Subject .OrganizationalUnit : csiapi .OrganizationalUnitsKey ,
83+ & request .Subject .Country : csiapi .CountriesKey ,
84+ & request .Subject .Province : csiapi .ProvincesKey ,
85+ & request .Subject .Locality : csiapi .LocalitiesKey ,
86+ & request .Subject .StreetAddress : csiapi .StreetAddressesKey ,
87+ & request .Subject .PostalCode : csiapi .PostalCodesKey ,
88+ } {
89+ if len (attrs [v ]) > 0 {
90+ var e , err = expand (meta , attrs [v ])
91+ if err != nil {
92+ return nil , fmt .Errorf ("%q: %w" , v , err )
93+ }
94+ * k = strings .Split (e , "," )
95+ }
96+ }
6297 }
63- dns , err : = parseDNSNames (meta , attrs [csiapi .DNSNamesKey ])
98+ request . DNSNames , err = parseDNSNames (meta , attrs [csiapi .DNSNamesKey ])
6499 if err != nil {
65100 return nil , fmt .Errorf ("%q: %w" , csiapi .DNSNamesKey , err )
66101 }
67- uris , err := parseURIs ( meta , attrs [csiapi .URISANsKey ])
102+ request . IPAddresses , err = parseIPAddresses ( attrs [csiapi .IPSANsKey ])
68103 if err != nil {
69- return nil , fmt .Errorf ("%q: %w" , csiapi .URISANsKey , err )
104+ return nil , fmt .Errorf ("%q: %w" , csiapi .IPSANsKey , err )
70105 }
71- ips , err := parseIPAddresses ( attrs [csiapi .IPSANsKey ])
106+ request . URIs , err = parseURIs ( meta , attrs [csiapi .URISANsKey ])
72107 if err != nil {
73- return nil , fmt .Errorf ("%q: %w" , csiapi .IPSANsKey , err )
108+ return nil , fmt .Errorf ("%q: %w" , csiapi .URISANsKey , err )
74109 }
75110
76111 return & manager.CertificateRequestBundle {
77- Request : & x509.CertificateRequest {
78- Subject : pkix.Name {
79- CommonName : commonName ,
80- },
81- DNSNames : dns ,
82- IPAddresses : ips ,
83- URIs : uris ,
84- },
112+ Request : request ,
85113 IsCA : strings .ToLower (attrs [csiapi .IsCAKey ]) == "true" ,
86114 Namespace : attrs [csiapi .K8sVolumeContextKeyPodNamespace ],
87115 Duration : duration ,
0 commit comments