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
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions katello_certs_tools/sslToolConfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.

subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid, issuer:always

[ req_client_x509_extensions ]
basicConstraints = CA:false
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
extendedKeyUsage = clientAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid, issuer:always
#===========================================================================
Expand All @@ -407,7 +407,7 @@ def figureDEFS_distinguishing(options):
[ req_server_x509_extensions ]
basicConstraints = CA:false
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
extendedKeyUsage = serverAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid, issuer:always

Expand Down
Loading