diff --git a/examples/README.md b/examples/README.md index 64b099cc..1c22d921 100644 --- a/examples/README.md +++ b/examples/README.md @@ -316,3 +316,108 @@ sure the certificate changes after 74-80 seconds. ```sh certificates $ step certificate inspect --insecure https://localhost:8443 ``` + +## NGINX with Step CA certificates + +The example under the `docker` directory shows how to combine the Smallstep CA +with NGINX to server pages or proxy services using certificates created by the +step-ca. + +This example creates 3 different docker images: + +* nginx-test: docker image with NGINX and a script using inotify-tools to watch + for changes in the certificate to reload NGINX. +* step-ca-test: docker image with the Smallstep CA +* step-renewer-test: docker images with the step cli tool, it creates the + certificate and has a cron that renews the certificate. Right now the cron + runs every minute for testing purposes. + +To run this test you need to have docker daemon running. With docker running +swith to the `examples/docker directory` and just run `make` + +```sh +certificates $ cd examples/docker/ +docker $ make +``` + +Make will build the binaries for step and step-ca, create the images, and deploy +them using docker composer. + +NGINX will be listening on your local machine on https://localhost:4443, but to +make sure the cert is right we need to add the following entry to `/etc/hosts`: + +``` +127.0.0.1 nginx +``` + +Now we can use curl to check: + +```sh +docker $ curl --cacert ca/pki/secrets/root_ca.crt https://nginx:4443/ + + + +Welcome to nginx! + + + +

Welcome to nginx!

+

If you see this page, the nginx web server is successfully installed and +working. Further configuration is required.

+ +

For online documentation and support please refer to +nginx.org.
+Commercial support is available at +nginx.com.

+ +

Thank you for using nginx.

+ + +``` + +Now you can use `make inspect` to inspect the certificate to see how the +certificate gets updated every minute: + +```sh +docker $ make inspect +step certificate inspect https://localhost:4443 --insecure +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 220353801925419530569669982276277771655 (0xa5c6993a7e110e6f009c83c79edc1d87) + Signature Algorithm: ECDSA-SHA256 + Issuer: CN=Smallstep Intermediate CA + Validity + Not Before: Nov 10 02:13:00 2018 UTC + Not After : Nov 11 02:13:00 2018 UTC +mariano@endor docker (docker-nginx)*$ make inspect | head +step certificate inspect https://localhost:4443 --insecure +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 207756171799719353821615361892302471392 (0x9c4c621c04d3e8be401ff0d14c5440e0) + Signature Algorithm: ECDSA-SHA256 + Issuer: CN=Smallstep Intermediate CA + Validity + Not Before: Nov 10 02:14:00 2018 UTC + Not After : Nov 11 02:14:00 2018 UTC +``` + +Finally, to remove the containers and volumes you can use `make clean`: + +```sh +docker $ make clean +docker service rm steplab_ca steplab_nginx steplab_renewer +steplab_ca +steplab_nginx +steplab_renewer +sleep 20 +docker volume rm -f steplab_certificates +steplab_certificates +```