Skip to content

Commit b62c80c

Browse files
committed
scion-pki: allow creating voting certificates without ISD-AS
Only for cp-root, cp-ca, and cp-as certificates the ISD-AS is mandatory.
1 parent 019049d commit b62c80c

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

scion-pki/certs/create.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ A valid example for a JSON formatted template::
202202
if err != nil {
203203
return serrors.Wrap("parsing profile", err)
204204
}
205-
subject, err := createSubject(args[0], flags.commonName)
205+
subject, err := createSubject(args[0], flags.commonName, ct == cppki.Sensitive || ct == cppki.Regular)
206206
if err != nil {
207207
return serrors.Wrap("creating subject", err)
208208
}
@@ -414,8 +414,8 @@ func parseCertType(input string) (cppki.CertType, error) {
414414
}
415415
}
416416

417-
func createSubject(tmpl, commonName string) (pkix.Name, error) {
418-
subject, err := loadSubject(tmpl)
417+
func createSubject(tmpl, commonName string, requireIA bool) (pkix.Name, error) {
418+
subject, err := loadSubject(tmpl, requireIA)
419419
if err != nil {
420420
return pkix.Name{}, err
421421
}
@@ -425,7 +425,7 @@ func createSubject(tmpl, commonName string) (pkix.Name, error) {
425425
return subject, nil
426426
}
427427

428-
func loadSubject(tmpl string) (pkix.Name, error) {
428+
func loadSubject(tmpl string, requireIA bool) (pkix.Name, error) {
429429
raw, err := os.ReadFile(tmpl)
430430
if err != nil {
431431
return pkix.Name{}, err
@@ -449,7 +449,7 @@ func loadSubject(tmpl string) (pkix.Name, error) {
449449
if err := json.Unmarshal(raw, &vars); err != nil {
450450
return pkix.Name{}, err
451451
}
452-
return subjectFromVars(vars)
452+
return subjectFromVars(vars, requireIA)
453453
}
454454

455455
func parseCertificate(raw []byte) (*x509.Certificate, error) {

scion-pki/certs/renew.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ The template is expressed in JSON. A valid example::
358358
if flags.subject != "" {
359359
template = flags.subject
360360
}
361-
subject, err := createSubject(template, flags.commonName)
361+
subject, err := createSubject(template, flags.commonName, true)
362362
if err != nil {
363363
return err
364364
}
@@ -925,8 +925,8 @@ func extractChainLegacy(rep *cppb.ChainRenewalResponse) ([]*x509.Certificate, er
925925
return chain, nil
926926
}
927927

928-
func subjectFromVars(vars SubjectVars) (pkix.Name, error) {
929-
if vars.IA.IsZero() {
928+
func subjectFromVars(vars SubjectVars, requireIA bool) (pkix.Name, error) {
929+
if requireIA && vars.IA.IsZero() {
930930
return pkix.Name{}, serrors.New("isd_as required in template")
931931
}
932932
s := pkix.Name{

scion-pki/certs/renew_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,40 +59,52 @@ func TestCSRTemplate(t *testing.T) {
5959
testCases := map[string]struct {
6060
File string
6161
CommonName string
62+
RequireIA bool
6263
Expected pkix.RDNSequence
6364
ErrAssertion assert.ErrorAssertionFunc
6465
}{
6566
"valid": {
6667
File: "testdata/renew/ISD1-ASff00_0_111.csr.json",
68+
RequireIA: true,
69+
Expected: wantSubject.ToRDNSequence(),
70+
ErrAssertion: assert.NoError,
71+
},
72+
"valid - no ISD-AS": {
73+
File: "testdata/renew/ISD1-ASff00_0_111.csr.json",
74+
RequireIA: false,
6775
Expected: wantSubject.ToRDNSequence(),
6876
ErrAssertion: assert.NoError,
6977
},
7078
"from chain": {
7179
File: "testdata/renew/ISD1-ASff00_0_111.pem",
80+
RequireIA: true,
7281
Expected: wantSubject.ToRDNSequence(),
7382
ErrAssertion: assert.NoError,
7483
},
7584
"custom common name": {
7685
File: "testdata/renew/ISD1-ASff00_0_111.csr.json",
7786
CommonName: "custom",
87+
RequireIA: true,
7888
Expected: customSubject.ToRDNSequence(),
7989
ErrAssertion: assert.NoError,
8090
},
8191
"custom common name from chain": {
8292
File: "testdata/renew/ISD1-ASff00_0_111.pem",
8393
CommonName: "custom",
94+
RequireIA: true,
8495
Expected: customSubject.ToRDNSequence(),
8596
ErrAssertion: assert.NoError,
8697
},
8798
"no ISD-AS": {
8899
File: "testdata/renew/no_isd_as.json",
100+
RequireIA: true,
89101
ErrAssertion: assert.Error,
90102
},
91103
}
92104
for name, tc := range testCases {
93105
t.Run(name, func(t *testing.T) {
94106
t.Parallel()
95-
subject, err := createSubject(tc.File, tc.CommonName)
107+
subject, err := createSubject(tc.File, tc.CommonName, tc.RequireIA)
96108
tc.ErrAssertion(t, err)
97109
if err != nil {
98110
return

0 commit comments

Comments
 (0)