Created
November 25, 2018 14:39
-
-
Save mikhail-angelov/abedcddfacf63631b87d814abbb15b28 to your computer and use it in GitHub Desktop.
docker tls certificates
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
export OPENSSL_CONF=openssl.cnf | |
echo 'Creating CA (ca-key.pem, ca.pem)' | |
echo 01 > ca.srl | |
openssl genrsa -des3 -passout pass:password -out ca-key.pem 2048 | |
openssl req -new -passin pass:password \ | |
-subj '/CN=Non-Prod Test CA/C=US' \ | |
-x509 -days 365 -key ca-key.pem -out ca.pem | |
echo 'Creating Swarm certificates (swarm-key.pem, swarm-cert.pem)' | |
openssl genrsa -des3 -passout pass:password -out swarm-key.pem 2048 | |
openssl req -passin pass:password -subj '/CN=dockerswarm01' -new -key swarm-key.pem -out swarm-client.csr | |
echo 'extendedKeyUsage = clientAuth,serverAuth' > extfile.cnf | |
openssl x509 -passin pass:password -req -days 365 -in swarm-client.csr -CA ca.pem -CAkey ca-key.pem -out swarm-cert.pem -extfile extfile.cnf | |
openssl rsa -passin pass:password -in swarm-key.pem -out swarm-key.pem | |
# Set the default keys to be Swarm | |
cp -rp swarm-key.pem key.pem | |
cp -rp swarm-cert.pem cert.pem | |
echo 'Creating host certificates (dockerhost01-3-key.pem, dockerhost01-3-cert.pem)' | |
openssl genrsa -passout pass:password -des3 -out dockerhost01-key.pem 2048 | |
openssl req -passin pass:password -subj '/CN=dockerhost01' -new -key dockerhost01-key.pem -out dockerhost01.csr | |
openssl x509 -passin pass:password -req -days 365 -in dockerhost01.csr -CA ca.pem -CAkey ca-key.pem -out dockerhost01-cert.pem -extfile openssl.cnf | |
openssl rsa -passin pass:password -in dockerhost01-key.pem -out dockerhost01-key.pem | |
openssl genrsa -passout pass:password -des3 -out dockerhost02-key.pem 2048 | |
openssl req -passin pass:password -subj '/CN=dockerhost02' -new -key dockerhost02-key.pem -out dockerhost02.csr | |
openssl x509 -passin pass:password -req -days 365 -in dockerhost02.csr -CA ca.pem -CAkey ca-key.pem -out dockerhost02-cert.pem -extfile openssl.cnf | |
openssl rsa -passin pass:password -in dockerhost02-key.pem -out dockerhost02-key.pem | |
openssl genrsa -passout pass:password -des3 -out dockerhost03-key.pem 2048 | |
openssl req -passin pass:password -subj '/CN=dockerhost03' -new -key dockerhost03-key.pem -out dockerhost03.csr | |
openssl x509 -passin pass:password -req -days 365 -in dockerhost03.csr -CA ca.pem -CAkey ca-key.pem -out dockerhost03-cert.pem -extfile openssl.cnf | |
openssl rsa -passin pass:password -in dockerhost03-key.pem -out dockerhost03-key.pem | |
# We don't need the CSRs once the cert has been generated | |
rm -f *.csr |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
http://cicd.life/generate-ssl-for-docker-swarm/ | |
http://dumbsakib.blogspot.com/2016/11/tls-for-docker-in-ubuntu-1604.html | |
https://docs.docker.com/engine/security/https/#create-a-ca-server-and-client-keys-with-openssl | |
https://docs.docker.com/compose/production/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# OpenSSL example configuration file. | |
# This is mostly being used for generation of certificate requests. | |
# | |
# This definition stops the following lines choking if HOME isn't | |
# defined. | |
HOME = . | |
RANDFILE = $ENV::HOME/.rnd | |
oid_section = new_oids | |
extensions = v3_req | |
[ new_oids ] | |
tsa_policy1 = 1.2.3.4.1 | |
tsa_policy2 = 1.2.3.4.5.6 | |
tsa_policy3 = 1.2.3.4.5.7 | |
#################################################################### | |
[ ca ] | |
default_ca = CA_default # The default ca section | |
#################################################################### | |
[ CA_default ] | |
dir = ./tls # Where everything is kept | |
certs = $dir/certs # Where the issued certs are kept | |
crl_dir = $dir/crl # Where the issued crl are kept | |
database = $dir/index.txt # database index file. | |
new_certs_dir = $dir/newcerts # default place for new certs. | |
certificate = $dir/cacert.pem # The CA certificate | |
serial = $dir/serial # The current serial number | |
crlnumber = $dir/crlnumber | |
crl = $dir/crl.pem # The current CRL | |
private_key = $dir/private/cakey.pem# The private key | |
RANDFILE = $dir/private/.rand # private random number file | |
x509_extensions = usr_cert # The extentions to add to the cert | |
name_opt = ca_default # Subject Name options | |
cert_opt = ca_default # Certificate field options | |
default_days = 365 # how long to certify for | |
default_crl_days= 30 # how long before next CRL | |
default_md = default # use public key default MD | |
preserve = no # keep passed DN ordering | |
policy = policy_match | |
[ policy_match ] | |
countryName = match | |
stateOrProvinceName = match | |
organizationName = match | |
organizationalUnitName = optional | |
commonName = supplied | |
emailAddress = optional | |
[ policy_anything ] | |
countryName = optional | |
stateOrProvinceName = optional | |
localityName = optional | |
organizationName = optional | |
organizationalUnitName = optional | |
commonName = supplied | |
emailAddress = optional | |
#################################################################### | |
[ req ] | |
default_bits = 1024 | |
default_keyfile = privkey.pem | |
distinguished_name = req_distinguished_name | |
attributes = req_attributes | |
x509_extensions = v3_ca # The extentions to add to the self signed cert | |
string_mask = utf8only | |
req_extensions = v3_req # The extensions to add to a certificate request | |
[ req_distinguished_name ] | |
countryName = Country Name (2 letter code) | |
countryName_default = AU | |
countryName_min = 2 | |
countryName_max = 2 | |
stateOrProvinceName = State or Province Name (full name) | |
stateOrProvinceName_default = Some-State | |
localityName = Locality Name (eg, city) | |
0.organizationName = Organization Name (eg, company) | |
0.organizationName_default = Internet Widgits Pty Ltd | |
organizationalUnitName = Organizational Unit Name (eg, section) | |
commonName = Common Name (e.g. server FQDN or YOUR name) | |
commonName_max = 64 | |
emailAddress = Email Address | |
emailAddress_max = 64 | |
[ req_attributes ] | |
challengePassword = A challenge password | |
challengePassword_min = 4 | |
challengePassword_max = 20 | |
unstructuredName = An optional company name | |
[ usr_cert ] | |
basicConstraints=CA:FALSE | |
nsComment = "OpenSSL Generated Certificate" | |
subjectKeyIdentifier=hash | |
authorityKeyIdentifier=keyid,issuer | |
[ v3_req ] | |
# Extensions to add to a certificate request | |
basicConstraints = CA:FALSE | |
keyUsage = nonRepudiation, digitalSignature, keyEncipherment | |
subjectAltName = @alt_names | |
[ v3_ca ] | |
subjectAltName = @alt_names | |
subjectKeyIdentifier=hash | |
authorityKeyIdentifier=keyid:always,issuer | |
basicConstraints = CA:true | |
[ crl_ext ] | |
authorityKeyIdentifier=keyid:always | |
[ alt_names ] | |
# The IPs of the Docker and Swarm hosts | |
IP.1 = 10.100.199.200 | |
IP.2 = 10.100.199.201 | |
IP.3 = 10.100.199.202 | |
IP.4 = 10.100.199.203 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment