step-ca
step-ca
step-ca
in a Docker containerstep-ca
step-ca
step-ca
in a Docker containerSmallstep makes running your own private CA and managing certificates for internal services easy. Open source step-ca
also supports OAuth for provisioning X.509 certificates for user authentication. We make it easy for developers to obtain a certificate via single sign-on using your existing identity provider (Google, Okta, Active Directory, ...). Issued certificates are signed by the CA and trusted by all your workloads and services so you can use mTLS everywhere.
step-ca
instance using the steps in Getting Started.User identities are usually already managed by your existing G-Suite, Okta, Salesforce, or Microsoft Azure Active Directory identity provider.
IDPs leverage a single database of user accounts to provide single sign on login to a wide array of applications and services.
The OpenID Connect protocol is commonly used to facilitate the exchange between the application, user, and IDP.
You can leverage OpenID Connect to authenticate with step-ca
to make issuance of personal certificates simple for your whole team.
Here's how to obtain a user certificate using an OAuth token from G-Suite.
Add a G-suite provisioner:
step ca provisioner add Google --type oidc \
--client-id 650445034027-jsjdrkiskeq9ke99ud2rqkst82ft8uch.apps.googleusercontent.com \
--client-secret 6Q7lGMua_Oox4nA92QBXYypT \
--configuration-endpoint https://accounts.google.com/.well-known/openid-configuration \
--domain smallstep.com --domain gmail.com
You'll need to restart or SIGHUP step-ca
in order to pick up the configuration changes.
kill -SIGHUP $(ps aux | grep step-ca | grep -v grep | awk '{print $2}')
Be sure to specify your G-Suite email address (the command's first argument) and select the "Google" provisioner from the dropdown:
$ step ca certificate davey.oauth.jones@gmail.com personal.crt personal.key
Use the arrow keys to navigate: ↓ ↑ → ←
What provisioner key do you want to use?
pDpbCsI8Thvci7EqyJJY7AoUIadufTeZQnAcBCwGuHE (admin)
▸ 650445034027-jsjdrkiskeq9ke99ud2rqkst82ft8uch.apps.googleusercontent.com (Google)
Unlike regular JWK-based provisioners no password prompt will come up in the terminal. Instead expect the default browser to open the G-Suite login screen. After successfully logging-in the CA will issue a certificate for the respective user.
$ step certificate inspect --short personal.crt
X.509v3 TLS Certificate (ECDSA P-256) [Serial: 1445...0545]
Subject: 113900523962383213156
davey.oauth.jones@gmail.com
Issuer: Local CA Intermediate CA
Provisioner: Google [ID: 6504....com]
Valid from: 2019-03-20T18:17:55Z
to: 2019-03-21T18:17:55Z
Let's bring up an example server configured to accept connections over mTLS.
Below is some python code we'll use for our example server:
import BaseHTTPServer, ssl
class H(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200); self.send_header('content-type', 'text/html; charset=utf-8'); self.end_headers()
san = self.connection.getpeercert().get('subjectAltName')[0][1]
self.wfile.write(b'\n\xf0\x9f\x91\x8b Hello '+san+'! Welcome to mTLS \xf0\x9f\x94\x92\xe2\x9c\x85\n\n')
httpd = BaseHTTPServer.HTTPServer(('', 8443), H)
httpd.socket = ssl.wrap_socket (httpd.socket, server_side=True, keyfile="localhost.key", certfile="localhost.crt",
cert_reqs=ssl.CERT_REQUIRED, ca_certs="root_ca.crt")
httpd.serve_forever()
Before running the server, let's create a server X.509 certificate and key pair:
step ca localhost localhost.crt localhost.key
Now let's run our Python example server:
python server.py
Finally we're ready to to test our personal certificate using curl
.
All we need to do is provide a root certificate for client-side server
authentication and our personal certificate and private key to pass the
server-side client authentication.
curl --cacert $(step path)/certs/root_ca.crt --cert personal.crt --key personal.key https://localhost:8443
Success! Using OpenID Connect to make personal X.509 certificates for your teams is an easy and powerful way to unlock strong identity for everybody, everywhere.
Unsubscribe anytime. See our privacy policy.
© 2023 Smallstep Labs, Inc. All rights reserved.