You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
2.8 KiB

6 years ago
# gencert
6 years ago
This script generates x509 server certificate (with all IPs in SAN) signed by a
self-signed CA.
6 years ago
## Purpose
- This script will always produce a self-signed x509 certificate in the
current path with the IP addresses embedded to x509's SAN.
It will also produce a CA certificate and can be used by other services
which may need to authenticate against this self-signed certificate.
The authentication works in a way that a public CA certificate will be
used by the client in order to validate the server's certificate.
## Application
6 years ago
### Backend requiring x509 running behind reverse proxy
6 years ago
- This script has been created in order to ease the Minio's SSE-C
(Server Side Encryption - Customer provided keys) enablement when
Minio server is running as a backend behind a reverse proxy like Traefik.
Minio server enables SSE-C only when it detects the x509 certificates.
Traefik running with docker service provider talks to the backend using
the IP. The IP usually is not static, hence this script comes handy.
## Example usage
### Minio server with Traefik example
6 years ago
1. Replace ``minio server`` command with the following one:
6 years ago
``cd /root/.minio/certs && ./gencert.sh --cn minio.example.com && minio server /data``
6 years ago
2. Copy the CA certificate ``ca.crt`` file to ``/usr/local/share/ca-certificates/`` and
run ``update-ca-certificates`` command which will update
6 years ago
``/etc/ssl/certs/ca-certificates.crt`` file;
6 years ago
3. Restart Traefik.
6 years ago
> With the Step 1. Minio server will get the certificate it needs, hence SSE-C
> will be enabled.
6 years ago
6 years ago
> Steps 2. and 3. will need to be repeated each time you get a new CA
6 years ago
> certificate.
> These steps can be automated this way:
6 years ago
> Start Traefik with this command:
> ``sh -c "update-ca-certificates && traefik"``
> while ``/usr/local/share/ca-certificates`` container path is mounted from the
> host with the CA certificate produced by this script.
6 years ago
6 years ago
> I am using Alpine Traefik image, the correct ca certificates path is
> ``/usr/local/share/ca-certificates/``, otherwise one of these
> https://golang.org/src/crypto/x509/root_linux.go
6 years ago
## Script logic
6 years ago
- generate CA certificate if does not find any
- always generate server certificate on startup to ensure all IP addresses
are in x509 SAN
- warn if the CA certificate is about to expire (<30 days till expiration)
- regenerate the CA certificate if it finds it has expired
6 years ago
## Notes
6 years ago
- The CA certificate will be valid for 3650 days (10 years)
- The server certifcate will be valid for 365 days (1 year)
- The x509 certs are ECDSA with prime256v1 curve and SHA256 signatures
6 years ago
## Testing
I have added a simplistic script [testme.sh](testme.sh) that helps to test this
script in the following Linux distributions:
- Alpine 3.7
- Ubuntu Bionic
- Debian Stretch
- CentOS 7