Skip to content
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

Cleanup deprecations and fix client/server usage #49

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

ehelms
Copy link
Member

@ehelms ehelms commented Aug 27, 2024

See https://docs.openssl.org/1.1.1/man5/x509v3_config/#deprecated-extensions for the noted deprecations being removed.

The code was also correctly setting nsCertType to the right purpose, but failing to match this with extendedKeyUsage. This fixes that inconsistency.

@ehelms
Copy link
Member Author

ehelms commented Aug 27, 2024

Includes #50 to fix test runs in CI

@@ -375,14 +375,14 @@ def figureDEFS_distinguishing(options):
[ req_server_x509_extensions ]
basicConstraints = CA:false
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
extendedKeyUsage = serverAuth
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if this is correct. Are you sure we're not mixing them? Like the Smart Proxy using the same certs for both client and serer.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you are asking "does Katello use them in a mixed usage way" the answer is no. We generate server and client certificates and strictly use them.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question is: should we use them in a mixed way? Does it hurt to have this here? Do we even check on the usage?

I'd feel more comfortable merging this just the deprecation removal for now (because that's obviously a good thing) and discuss the key usage separate (because I don't know how to think about it yet).

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a tough question. My reading has led me to conclude this comes down to how strict we want to be. Being strict about these usages is an implementation of the principal of least privilege. Do we want our client certificates to be able to be used for servers and vice versa, do we want our server certificates to be able to be used as client certificates?

If we said yes - then we would only need to generate one set of certificates per hostname and use it for Apache, foreman-proxy, foreman client certs, etc.

If we said no, then we could roughly stay with the structure we have now and fix this inconsistency as I have noted it here.

You can see, that we even expect this in puppet-certs: https://github.com/theforeman/puppet-certs/blob/master/manifests/foreman.pp#L29

We test for it -- https://github.com/theforeman/puppet-certs/blob/master/spec/acceptance/apache_spec.rb#L36

I ran a pipeline, implementing this and all bats tests passed so our deployment model even expects it.

I think as I understand it, you can also go one step further and mark extensions as critical in which the CA certificate will enforce the purpose. In some of my testing, even without the critical I was able to see Apache enforcing the purpose - that is, trying to use a serverAuth only certificate to perform a client action was rejected.

Here is an example of testing that:

[root@certs vagrant]# curl https://`hostname`/pulp/api/v3/users/ --cert /etc/foreman/client_cert.pem --key /etc/pki/katello/private/
certs.wareagle.example.com-foreman-proxy-client-bundle.pem  katello-apache.key                                          
[root@certs vagrant]# curl https://`hostname`/pulp/api/v3/users/ --cert /etc/pki/katello/certs/katello-apache.crt --key /etc/pki/katello/private/katello-apache.key 
curl: (56) OpenSSL SSL_read: error:0A000413:SSL routines::sslv3 alert unsupported certificate, errno 0

Where each of these has a single purpose as outlined in this PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants