Skip to content

Commit 077a3e9

Browse files
committed
generate and use temporary self-signed certs
1 parent d4b0872 commit 077a3e9

7 files changed

Lines changed: 81 additions & 28 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ build: ## build the docker image
88
docker build -t aveltens/solid-server ./src
99

1010
inspect: build ## run a shell in the docker image
11-
docker run --rm -it aveltens/solid-server sh
11+
docker run --rm -it --entrypoint sh aveltens/solid-server
1212

1313
start: build ## start solid-server docker container
1414
docker run --rm \

src/Dockerfile

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
FROM node:10-alpine
22

3+
RUN apk add --no-cache openssl
4+
35
RUN npm install -g solid-server
46

7+
# image configuration
58
ENV SOLID_HOME=/opt/solid
69
ENV PROCESS_USER=node
10+
ENV TEMPORARY_CERT_NAME=solid-temporary
711

812
WORKDIR ${SOLID_HOME}
9-
RUN chown ${PROCESS_USER}:${PROCESS_USER} ${SOLID_HOME}
13+
COPY ./entrypoint.sh ./entrypoint.sh
14+
COPY ./create-temporary-cert.sh ./create-temporary-cert.sh
15+
RUN chown --recursive ${PROCESS_USER}:${PROCESS_USER} ${SOLID_HOME}
1016

1117
USER ${PROCESS_USER}
1218

1319
# solid configuration
1420
ENV SOLID_ROOT=${SOLID_HOME}/data
21+
ENV SOLID_SSL_KEY=${SOLID_HOME}/${TEMPORARY_CERT_NAME}.key
22+
ENV SOLID_SSL_CERT=${SOLID_HOME}/${TEMPORARY_CERT_NAME}.crt
1523
ENV SOLID_PORT=8443
24+
ENTRYPOINT ["./entrypoint.sh"]
1625

17-
CMD ["solid", "start"]
26+
CMD ["start"]

src/create-temporary-cert.sh

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/bin/sh
2+
set -e
3+
4+
NAME=$1
5+
6+
if [ -z $NAME ]; then
7+
echo "Usage: ./create-temporary-cert.sh some-name"
8+
exit 1
9+
fi
10+
11+
openssl req -nodes -x509 -days 3 -newkey rsa:2048 \
12+
-keyout ./$NAME.key \
13+
-out ./$NAME.crt \
14+
-subj "/O=$NAME/OU=$NAME/CN=$NAME"
15+
16+
echo "Finished: SUCCESS"
17+
exit 0;

src/entrypoint.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/sh
2+
3+
set -e
4+
5+
./create-temporary-cert.sh ${TEMPORARY_CERT_NAME}
6+
7+
solid "$@"

test/test_image_foundations.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ def container(client, image):
1010
name="test_container",
1111
detach=True,
1212
tty=True,
13-
command="sh"
13+
entrypoint="sh",
14+
command="-"
1415
)
1516
yield container
1617
container.remove(force=True)
@@ -30,3 +31,21 @@ def test_node_command_is_available(host):
3031

3132
def test_node_version_is_10(host):
3233
assert host.check_output("node --version").startswith('v10')
34+
35+
def test_openssl_command_is_available(host):
36+
assert host.exists("openssl")
37+
38+
def test_entrypoint_exist(host):
39+
entrypoint = host.file("/opt/solid/entrypoint.sh")
40+
assert entrypoint.is_file
41+
assert entrypoint.user == "node"
42+
assert entrypoint.group == "node"
43+
44+
def test_create_temporary_cert_exist(host):
45+
create_temporary_cert = host.file("/opt/solid/create-temporary-cert.sh")
46+
assert create_temporary_cert.is_file
47+
assert create_temporary_cert.user == "node"
48+
assert create_temporary_cert.group == "node"
49+
50+
def test_solid_command_is_available(host):
51+
assert host.exists("solid")

test/test_solid_default_config.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,30 @@ def test_solid_config_dir_exists_and_owned_by_node(host):
3838
assert solid_config.user == "node"
3939
assert solid_config.group == "node"
4040

41+
def test_temporary_tls_cert_exists(host):
42+
cert = host.file("/opt/solid/solid-temporary.crt")
43+
assert cert.exists
44+
assert cert.is_file
45+
assert cert.user == "node"
46+
assert cert.group == "node"
47+
48+
def test_temporary_tls_key_exists(host):
49+
key = host.file("/opt/solid/solid-temporary.key")
50+
assert key.exists
51+
assert key.is_file
52+
assert key.user == "node"
53+
assert key.group == "node"
54+
55+
def test_certificate_and_key_are_used(host):
56+
env = host.check_output("env")
57+
assert "SOLID_SSL_KEY=/opt/solid/solid-temporary.key" in env
58+
assert "SOLID_SSL_CERT=/opt/solid/solid-temporary.crt" in env
59+
60+
def test_solid_is_running(host):
61+
solid = host.process.get(comm="node")
62+
assert solid.args == "node /usr/local/bin/solid start"
63+
assert solid.user == "node"
64+
assert solid.group == "node"
65+
4166
def test_solid_is_listening_on_port_8443(host):
4267
assert host.socket("tcp://0.0.0.0:8443").is_listening

test/test_solid_server.py

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)