ssh: reject empty certificate principals

CheckCert did not reject an empty principal, so a certificate that
lists an empty principal was accepted for an empty user name or host
name. Both can occur: the server accepts an empty user name, and an
address such as ":22" has an empty host name.

Never match an empty principal, and reject an empty entry in
ValidPrincipals in SignCert, as ssh-keygen does. A certificate holding
one still parses, as in OpenSSH, and its other principals still match.

Fixes golang/go#81539

Change-Id: I9d33113c68dcd3f40914bf6de87613902542619e
Reviewed-on: https://go-review.googlesource.com/c/crypto/+/844646
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
2 files changed
tree: 6924794a247858a595ff162270e1de58840c0dea
  1. acme/
  2. argon2/
  3. bcrypt/
  4. blake2b/
  5. blake2s/
  6. blowfish/
  7. bn256/
  8. cast5/
  9. chacha20/
  10. chacha20poly1305/
  11. cryptobyte/
  12. curve25519/
  13. ed25519/
  14. hkdf/
  15. internal/
  16. md4/
  17. nacl/
  18. ocsp/
  19. otr/
  20. pbkdf2/
  21. pkcs12/
  22. poly1305/
  23. ripemd160/
  24. salsa20/
  25. scrypt/
  26. sha3/
  27. ssh/
  28. tea/
  29. twofish/
  30. x509roots/
  31. xtea/
  32. xts/
  33. .gitattributes
  34. .gitignore
  35. codereview.cfg
  36. CONTRIBUTING.md
  37. go.mod
  38. go.sum
  39. LICENSE
  40. PATENTS
  41. README.md
README.md

Go Cryptography

Go Reference

This repository holds supplementary Go cryptography packages.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/crypto.

The main issue tracker for the crypto repository is located at https://go.dev/issues. Prefix your issue with “x/crypto:” in the subject line, so it is easy to find.

Note that contributions to the cryptography package receive additional scrutiny due to their sensitive nature. Patches may take longer than normal to receive feedback.