Make your CouchDB a straight A SSL student!
NOTE: This image uses nginx to provide the SSL/TLS endpoint. CouchDB's SSL features are unused.
Version: CouchDB 1.6.1 and nginx 1.9.9.
Available in the docker index as klaemo/couchdb-ssl based on klaemo/couchdb
Note: Out of the box bogus self-signed certificates are being used. You should replace them with your real files (see below).
$ [sudo] docker pull klaemo/couchdb-ssl:latest
# expose it to the world on port 6984
$ [sudo] docker run -d -p 6984:6984 --name couchdb klaemo/couchdb-ssl
$ curl -k https://localhost:6984- exposes couchdb on port
6984(https) of the container - runs everything as non-root user (security ftw!)
- nginx is configured with a list of preferable cipher suites (more security win!!11)
Your CouchDB will get a straight A on the SSL Labs Server Test!
You can use klaemo/couchdb-ssl as the base image for your own couchdb instance.
You might want to provide your own version of the following files:
local.inifor CouchDB.nginx.conffor nginx configuration.server.crtfor nginx configuration (certificate).server.keyfor nginx configuration (private key).dhparams.pemfor nginx configuration (diffie-helman parameters).chain.pemfor nginx configuration (all three above combined).
Example Dockerfile:
FROM klaemo/couchdb-ssl
COPY local.ini /usr/local/etc/couchdb/
COPY nginx.conf /etc/nginx/
COPY server.crt /etc/nginx/certs/
COPY server.key /etc/nginx/certs/
COPY dhparams.pem /etc/nginx/certs/
COPY chain.pem /etc/nginx/certs/and then build and run it
$ [sudo] docker build -t you/awesome-couchdb .
$ [sudo] docker run -d -p 5984:5984 -p 6984:6984 you/awesome-couchdbet voilá you have your own CouchDB instance with SSL support on port 6984.
Heroku - Creating a Self-Signed SSL Certificate
$ openssl genrsa -des3 -passout pass:x -out server.pass.key 2048
$ openssl rsa -passin pass:x -in server.pass.key -out server.key
writing RSA key
$ rm server.pass.key
$ openssl req -new -key server.key -out server.csr
...
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
...
A challenge password []:
...
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=localhost
Getting Private key$ openssl dhparam -out dhparams.pem 2048NOTE: For higher key size negotiation, you may wish to create a 4096 bit dhparams file. Just change the number above.
The chain.pem file contains your SSL key, certificates and DH parameters.
Specifically, the following information:
- The server's private key
- The server's certificate (signing its private key)
- (Optionally) Intermediate certificates
- (Optionally, recommended) DH parameters
To create the PEM file, use something similar to the following:
$ cat server.key server.crt [intermediate_cert1.pem ...] dhparams.pem > chain.pem- thanks @dscape for this article
- hynek.me
- mozilla for the resources on SSL/TLS configuration
Apache License 2.0