Skip to content

Commit 1de6f4d

Browse files
committed
Merge branch 'mwielgoszewski-validate-cert'
2 parents 276dd6f + 1660fb1 commit 1de6f4d

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

sign_certd.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,18 @@ func (h *certRequestHandler) validateCert(cert *ssh.Certificate, authorizedSigne
377377
err := fmt.Errorf("Cert not valid: %v", err)
378378
return err
379379
}
380+
381+
if cert.CertType != ssh.UserCert {
382+
err = errors.New("Cert not valid: not a user certificate")
383+
return err
384+
}
385+
386+
// explicitly call IsUserAuthority
387+
if !certChecker.IsUserAuthority(cert.SignatureKey) {
388+
err = errors.New("Cert not valid: not signed by an authorized key")
389+
return err
390+
}
391+
380392
return nil
381393
}
382394

sign_certd_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,34 @@ func TestSaveRequestValidCriticalOptions(t *testing.T) {
277277
}
278278
}
279279

280+
func TestValidateCert(t *testing.T) {
281+
allConfig := SetupSignerdConfig(1, 0)
282+
environment := "testing"
283+
envConfig := allConfig[environment]
284+
requestHandler := makeCertRequestHandler(allConfig)
285+
286+
pubKey, _, _, _, err := ssh.ParseAuthorizedKey([]byte(boringUserCertString))
287+
if err != nil {
288+
t.Fatalf("Parsing canned cert failed: %v", err)
289+
}
290+
cert := pubKey.(*ssh.Certificate)
291+
292+
// test-user is *not* in the list of authorized signers
293+
294+
err = requestHandler.validateCert(cert, envConfig.AuthorizedSigners)
295+
296+
if err == nil {
297+
t.Fatalf("Should have failed. Succeeded with: %v", err)
298+
}
299+
300+
// test-user *is* in the list of authorized users
301+
302+
err = requestHandler.validateCert(cert, envConfig.AuthorizedUsers)
303+
if err != nil {
304+
t.Fatalf("Should have succeeded. Failed with: %v", err)
305+
}
306+
}
307+
280308
func getTwoBoringCerts(t *testing.T) (*ssh.Certificate, *ssh.Certificate) {
281309
pubKeyOne, _, _, _, err := ssh.ParseAuthorizedKey([]byte(boringUserCertString))
282310
if err != nil {

0 commit comments

Comments
 (0)