-
Notifications
You must be signed in to change notification settings - Fork 3.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Certificate authentication with colon-separated SAN URI fails in 22.1.6 #87235
Comments
Thanks for the repro steps - I have a fix prepared & should have a PR up shortly. We'll have to backport this into v22.1.7 or do an extraordinary release to get it into v22.1. @jonstjohn let me know if you have a preference here (if they can fallback to v22.1.5 until v22.1.7, that's preferable, but if it's high priority we can expedite). The v22.1.7 release is scheduled for publish on September 12th currently, but it depends on whether we can get the original PR + backport merged before September 6th (might be cutting it close...). If we miss it, we can try pushing for an extraordinary release if it's time sensitive, or we'd wait for v22.1.8, which is scheduled for publish on October 3rd. The fix itself is to simply relax our requirement on the URI SAN scheme/format. If we don't recognize the format, instead of erroring out and exiting, we'll fallback to the legacy behavior. I did some tests - first, to reproduce:
Then, with my proposed changes:
I'm going to polish this up and get a PR out - I'll do my best to move quickly! |
Thanks for the update @abarganier ! Yes, they can use 22.1.5 until the fix comes out. Ideally, we would have the fix in 22.1.7 but if that isn't possible, a fix in 22.1.8 is acceptable as there isn't a pressing need to upgrade at the moment. |
Hi @knz, please add branch-* labels to identify which branch(es) this release-blocker affects. 🦉 Hoot! I am a Blathers, a bot for CockroachDB. My owner is otan. |
Hi @knz, please add branch-* labels to identify which branch(es) this release-blocker affects. 🦉 Hoot! I am a Blathers, a bot for CockroachDB. My owner is otan. |
this is a release blocker. |
87302: pkg/security: relax requirement to follow CRDB URI SAN cert scheme r=knz a=abarganier Recently, a customer upgraded to v22.1.6, a recent patch release which contains the new tenant-scoped client certificates and asssociated authorization logic updates. The new authz logic *required* that the SAN URIs included in the client certificate followed the URI SAN scheme: `crdb://tenant/<tenant_id>/user/<tenant_username>` However, for customers that use URI SANs that do not follow this convention or do not have the flexibility to alter the URI SAN, this was preventing them from using their existing certificates. This would generate an error when attempting to connect to a SQL shell. One example URI SAN is as follows: `mycompany:sv:rootclient:dev:usw1` This is a certificate that worked with the legacy behavior, but is rejected by the new authz logic. We should update the authz logic to be less strict about the URI SAN following our own scheme. If we are unable to parse the URI SAN then we should fallback to using the globally scoped client certificate instead, enabling backwards compatibility. This patch does just that, logging an error in the case where we are unable to parse the URI SAN and instead falling back to the legacy behavior, producing a global user scope for the certificate. Release note: none Release justification: low risk, necessary fix to enable customers using custom URI SAN schemes to continue using their existing certificates on newer CRDB versions. Addresses #87235 87311: backupccl: parallelize loading of manifests from External Storage r=benbardin a=adityamaru This change is a targetted change to parallelize the loading of backup manifests for each incremental layer of a backup. This method is shared by both restore as well as `SHOW BACKUP`. Fixes: #87183 Release note: None Release justification: low risk performance improvement required for making `SHOW BACKUP` in the presence of many incremental layers more performant 87316: sctest: Augmented BACKUP/RESTORE tests with table-level restore r=Xiang-Gu a=Xiang-Gu Commit 1: non-code minor changes (added comments, moved function a little bit) Commit 2: Previously, the Backup test in declarative schema changer backups the whole database and restore the whole database with `RESTORE DATABASE`. This PR augments the test by adding another flavor to restore: `RESTORE TABLE tbl1,...,tblN` where `tblx` are *all* the tables in the backup. This will nicely give us coverage for `RESTORE TABLE` when a declarative schema changer job is restored. Note that ideally we want to randomly restore only a subset of all the table. Indeed I tried to implement that but realize it was blocked by one limitation in the declarative shcema changer: We don't yet support restore schema changer job that skips missing sequences (E.g. if we have a table `t` and a sequence `s`, and I want to `ALTER TABLE t ADD COLUMN c DEFAULT nextval('s')`, we backup database in PostCommit phase. Later when we restore just `t`, the schema changer job will run into error `error executing 'missing rewrite for id 109 in <column_default_expression:<table_id:108 column_id:2 embedded_expr:<expr:"nextval(109:::REGCLASS)" uses_sequence_ids:109 >)`) This issue is tracked in #87518. Fixes: #86835 Release justification: test-only changes Release note: None 87446: authors: add faizaanmadhani to authors r=faizaanmadhani a=faizaanmadhani Release note: None Release justification: non-production code change 87459: scbuildstmt: fallback if adding a virtual column with NOT NULL r=Xiang-Gu a=Xiang-Gu We found a regression in the new schema changer for the following stmt: `ALTER TABLE t ADD COLUMN j INT AS (NULL::INT) VIRTUAL NOT NULL;` incorrectly succeeded. This PR made `ADD COLUMN` fall back if the to-be-added column is a virtual column with NOT NULL constraint. Surprisingly, we actually have logic tests in place for this case but it has incorrect expected output so we also changed the exsiting tests. Fix: #87457 Release justification: bug fix for GA blocker. Release note: None 87506: ci: add some extra environment variables for sqllogic corpus nightly r=healthy-pod a=rickystewart Without these extra environment variables, GitHub posting doesn't work correctly. Release justification: Non-production code changes Release note: None Co-authored-by: Alex Barganier <[email protected]> Co-authored-by: adityamaru <[email protected]> Co-authored-by: Xiang Gu <[email protected]> Co-authored-by: Faizaan Madhani <[email protected]> Co-authored-by: Ricky Stewart <[email protected]>
@jonstjohn this has been resolved for both 22.2, and the next 22.1 release ( We now look through all the URI SANs included in the certificate for one with the expected In the case where none of the provided URI SANs have the expected Thanks for reporting this issue. Marking as closed. |
Thanks @abarganier and others! Really appreciate the turn-around! |
update: v22.1.7 will include this change, since the release schedule shifted slightly which allowed this fix to make it in. it's currently targeted to go out next week. |
Great news @rafiss! Thanks for clarifying. |
Describe the problem
If a client certificate that includes a colon-separated SAN URI is used to authenticate with CRDB in 22.1.6, the following errors occurs:
This issue appeared in 22.1.6 and looks like it is related to #84371 .
To Reproduce
Generate a client certificate with a colon-separated SAN URI.
Setup a simple directory structure to hold keys and configuration materials:
Put the cluster's
ca.key
inauth/safe
andca.crt
inauth/certs
.Initialize the openssl index and serial files:
Create a ca configuration file in
auth/openssl/ca.cnf
:Create a certificate configuration file in
auth/openssl/sanuri.client.cnf
:Next, generate a certificate using openssl and the cluster's ca key:
Inspect the certificate:
Create the user on the cluster:
Try to login using the cockroach client (where $CRDB_IP_EXTERNAL is the accessible IP):
Note the error message.
For the login to be successful in 22.1.5 and earlier, a cert-principal-map and/or identity map needs to be configured, but the error is present even without that.
Expected behavior
This should work as it does in 22.1.5 and earlier versions.
Additional data / screenshots
None
Environment:
Additional context
Unable to upgrade to 22.1.6.
Certificates are generated via a company-wide policy and the format cannot be changed.
Jira issue: CRDB-19225
The text was updated successfully, but these errors were encountered: