aboutsummaryrefslogtreecommitdiff
path: root/ssh/keys_test.go
diff options
context:
space:
mode:
authorNicola Murino <nicola.murino@gmail.com>2025-06-04 12:39:12 +0200
committerGopher Robot <gobot@golang.org>2025-06-30 09:02:50 -0700
commitc6fce028266aa1271946a7dfde94cd71cf077d5e (patch)
treea528bed47b954a837edfb2687e1c592342b1015f /ssh/keys_test.go
parent0ae49b8145643036e0e6c266cf4edc0f543ea9e0 (diff)
downloadgo-x-crypto-c6fce028266aa1271946a7dfde94cd71cf077d5e.tar.xz
ssh: refuse to parse certificates that use a certificate as signing key
According to draft-miller-ssh-cert-01, Section 2.1.1, certificates with certificate keys as signature keys are invalid Change-Id: I474524ea444deb78f2fa7c2682e47c0fd057f0b8 Reviewed-on: https://go-review.googlesource.com/c/crypto/+/678716 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: David Chase <drchase@google.com> Auto-Submit: Nicola Murino <nicola.murino@gmail.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com> Reviewed-by: Filippo Valsorda <filippo@golang.org>
Diffstat (limited to 'ssh/keys_test.go')
-rw-r--r--ssh/keys_test.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/ssh/keys_test.go b/ssh/keys_test.go
index 7d5b86f..f3eb223 100644
--- a/ssh/keys_test.go
+++ b/ssh/keys_test.go
@@ -810,3 +810,30 @@ func TestCryptoPublicKey(t *testing.T) {
}
}
}
+
+func TestParseCertWithCertSignatureKey(t *testing.T) {
+ certBytes := []byte(`-----BEGIN SSH CERTIFICATE-----
+AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIPSp27hvNSB0
+IotJnVhjC4zxNgNS8BHlUCxD0VJi4D/eAAAAIIJMi1e5qfx+IFuKD/p/Ssqcb3os
+CpOw/4wBs1pQ53zwAAAAAAAAAAEAAAACAAAAAAAAABMAAAAPZm9vLmV4YW1wbGUu
+Y29tAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT0AAAAgc3NoLWVkMjU1
+MTktY2VydC12MDFAb3BlbnNzaC5jb20AAAAg+sNYhCO35mQT1UBMpmMk8ey+culd
+IU8vBlPEl4B07swAAAAggiv+RLnboS4znGCVl/n1jDg2uD0h15tW4s/04eS2mLQA
+AAAAAAAAAQAAAAIAAAAAAAAAEwAAAA9mb28uZXhhbXBsZS5jb20AAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACCV2wETgLKL
+Kt0bRl3YUnd/ZYSlq0xJMbn4Jj3cdPWykQAAAFMAAAALc3NoLWVkMjU1MTkAAABA
+WOdbRGEzyRAhiIK227CLUQD5caXYMV8FvSIB7toEE2M/8HnWdG9H3Rsg/v3unruQ
+JrQldnuPJNe7KOP2+zvUDgAAAFMAAAALc3NoLWVkMjU1MTkAAABAm3bIPp85ZpIe
+D+izJcUqlcAOri7HO8bULFNHT6LVegvB06xQ5TLwMlrxWUF4cafl1tSe8JQck4a6
+cLYUOHfQDw==
+-----END SSH CERTIFICATE-----
+ `)
+ block, _ := pem.Decode(certBytes)
+ if block == nil {
+ t.Fatal("invalid test certificate")
+ }
+
+ if _, err := ParsePublicKey(block.Bytes); err == nil {
+ t.Fatal("parsing an SSH certificate using another certificate as signature key succeeded; expected failure")
+ }
+}