Skip to content

Commit fd290c4

Browse files
committed
Add support for SSL access to the Pbench Server
PBENCH-1149
1 parent 1f4087f commit fd290c4

File tree

6 files changed

+92
-2
lines changed

6 files changed

+92
-2
lines changed

.gitleaks.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
# instance inside the created ephemeral container.
99
'''server\/pbenchinacan\/etc\/pbench-server\/pbench-server\.cfg$''',
1010

11+
# Ignore the CA private key which is used only to generate ephemeral certs
12+
# for SSL access to the containerized Server for functional testing.
13+
'''server\/pbenchinacan\/etc\/pki\/tls\/private\/pbench_CA\.key$''',
14+
1115
# Ignore the .gitleaks.toml (this file).
1216
'''\.gitleaks\.toml$''',
1317
]

server/lib/config/nginx.conf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ http {
7272
server {
7373
listen 8080;
7474
listen [::]:8080;
75+
listen 8443 ssl;
76+
listen [::]:8443 ssl;
7577
server_name _;
78+
ssl_certificate /etc/pki/tls/certs/pbench-server.crt;
79+
ssl_certificate_key /etc/pki/tls/private/pbench-server.key;
7680
root /srv/pbench/public_html;
7781
index index.html;
7882

server/pbenchinacan/deploy

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,16 @@ GITTOP=${GITTOP:-$(git rev-parse --show-toplevel)}
4242
PB_DASHBOARD_DIR=${PB_DASHBOARD_DIR:-${GITTOP}/dashboard/build}
4343
PB_DEPLOY_FILES=${PB_DEPLOY_FILES:-${HOME}/Deploy}
4444
SRV_PBENCH=${SRV_PBENCH:-/srv/pbench}
45+
PB_SSL_CERT_FILE=${PB_SSL_CERT_FILE:-${PB_DEPLOY_FILES}/pbench-server.crt}
46+
PB_SSL_KEY_FILE=${PB_SSL_KEY_FILE:-${PB_DEPLOY_FILES}/pbench-server.key}
4547

4648
# Locations inside the container
4749
#
4850
# The value of ${NGINX_FAVICON} points to the location where the file will be
4951
# found inside the container and is used to create a symbolic link; by default,
5052
# it refers to a file in the Dashboard deployment relative to
5153
# /srv/pbench/public_html.
52-
NGINX_FAVICON=${NGINX_FAVICON:-"./dashboard/src/assets/logo/color-square.16x16.ico"}
54+
NGINX_FAVICON=${NGINX_FAVICON:-./dashboard/$(realpath --relative-to "${PB_DASHBOARD_DIR}" "${PB_DASHBOARD_DIR}"/static/media/color-square.256x256*.ico)}
5355

5456
#+
5557
# Deployment
@@ -110,6 +112,8 @@ podman run \
110112
--rm \
111113
--volume ${PB_DEPLOY_FILES}/etc/rsyslog.conf:/etc/rsyslog.conf:Z \
112114
--volume ${PB_DEPLOY_FILES}/etc/rsyslog.d:/etc/rsyslog.d:Z \
115+
--volume ${PB_SSL_CERT_FILE}:/etc/pki/tls/certs/pbench-server.crt:Z \
116+
--volume ${PB_SSL_KEY_FILE}:/etc/pki/tls/private/pbench-server.key:Z \
113117
--volume ${PB_DEPLOY_FILES}/pbench-server.cfg:/opt/pbench-server/lib/config/pbench-server.cfg:Z \
114118
--volume ${SRV_PBENCH}:/srv/pbench:Z \
115119
${PB_SERVER_PODMAN_SWITCHES} \
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDYTCCAkmgAwIBAgIUUtVXi1qMBbg1wLVBmeUM/tMuWsMwDQYJKoZIhvcNAQEL
3+
BQAwQDEaMBgGA1UEAwwRcGJlbmNoLnJlZGhhdC5jb20xCzAJBgNVBAYTAlVTMRUw
4+
EwYDVQQHDAxXZXN0Zm9yZCwgTUEwHhcNMjMwNTA1MjEzNzU0WhcNMjQwNDI1MjEz
5+
NzU0WjBAMRowGAYDVQQDDBFwYmVuY2gucmVkaGF0LmNvbTELMAkGA1UEBhMCVVMx
6+
FTATBgNVBAcMDFdlc3Rmb3JkLCBNQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
7+
AQoCggEBAJVWR8CY3cvtLu5Ss9XAWBp5PNE/X0zWJtRrph/Xz0qtQsxpqn9fhEjF
8+
kLr36AkewbOoW8HmqKzSrS9bgCrdglH1oqefLntt6q9F10SOCXF2jbQA3r63f9Kb
9+
co0Sa8NkV60E5zOvS+cEz+g3ZQVWoYhPnE3h2QTZ6rei41k1TvE/vcPUfjcR4uaD
10+
Xxtl6vUi9zoM7b3I1I0Cztg23e86ZsEVd+OZVDQbYLd4A3uBmzcmepHP6mwNc+Gm
11+
yhNeQ0ovu03Zz8j9W64Jau8Tpaja90s48pk0VRdfQX//N4mntAo3vYwd3Ab4Pq4o
12+
2c2GGpihLURlOCk9fNGo/s9atP/0+NsCAwEAAaNTMFEwHQYDVR0OBBYEFMz+SX+d
13+
JyWELuNukm1Szpz+l7qiMB8GA1UdIwQYMBaAFMz+SX+dJyWELuNukm1Szpz+l7qi
14+
MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBACxI0EXHjJtPhPkX
15+
1gLDxeID1+HMSmQVfnEd0zcBz/DhACVPnAPHF+lQ0QLfqJobmSKRei9s0pa5XEfo
16+
vIVcBvzKE7tuEM7ZeCKx0PBftp7poMEQyIEPezoaD9j20rXE14KS2fCOnFkahGjp
17+
CeYqHjnnf+LMkYf1nXM3Yhxz4w3uzFQmYO+pRVAE6Vjeftz2d3s2w+1G/bNPKgEu
18+
8NbG/6T25ZNe0T+wE8rxvB1+tDuPbIc83or7SrpiaxbSo1wqAm/ajxW6bdXftP0l
19+
aLLlVemlt3oWE9lkVDtuMJTbt0noCjb3FlWrDVwm5Zm3ilVf8L2JOsG7LYjYUAQs
20+
5VgnCv8=
21+
-----END CERTIFICATE-----
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCVVkfAmN3L7S7u
3+
UrPVwFgaeTzRP19M1ibUa6Yf189KrULMaap/X4RIxZC69+gJHsGzqFvB5qis0q0v
4+
W4Aq3YJR9aKnny57beqvRddEjglxdo20AN6+t3/Sm3KNEmvDZFetBOczr0vnBM/o
5+
N2UFVqGIT5xN4dkE2eq3ouNZNU7xP73D1H43EeLmg18bZer1Ivc6DO29yNSNAs7Y
6+
Nt3vOmbBFXfjmVQ0G2C3eAN7gZs3JnqRz+psDXPhpsoTXkNKL7tN2c/I/VuuCWrv
7+
E6Wo2vdLOPKZNFUXX0F//zeJp7QKN72MHdwG+D6uKNnNhhqYoS1EZTgpPXzRqP7P
8+
WrT/9PjbAgMBAAECggEAJW9iAD0xyFd2Hsb7jrcvPr+qh7evn5bFWBV+KNhT/d/N
9+
8WkBlPlwMz/XRo8zium7W9p12fcEzIHpaQgyakxpyTreoc9M+yL0JCjJTEWgx2EV
10+
J4zaSYu9TqGqBwQZoHrsYZJrlLC6Qbial5cfS0XKq11tjLZzTPyFkrAR9sBewCm8
11+
tnh2FF/ktSgfZ4TfSWCgL0NwCbFNFHr7AeEii4vwJmZp0Yus/2OkdHxLFU/+yiOG
12+
Aa9Sa0xw4mFeQisjU7WOMbiozC3vaEOM+m2diNkxirvKAinEISEqAAcVO1+meKb+
13+
7GUNTsHj5jFSLebyJvZtmQAgkm8JwT2FUFxlCwr+NQKBgQC6Mw2gilx0Ne3zc9Q+
14+
qpINEdxxPWbDJz8aTzXFWmIdNCiv61RgGNYMNZTulU6pjZDcE/zs8kwqODi0nMsZ
15+
JLRyB/Zi0qeCQXs5xkoZSax3Oj+wrZQZeay704mUETStchs+LI6NgZNBVFozeVch
16+
aDXehKRrZaWQy/g+fu5w4EQ9dwKBgQDNUaoNghspoGdZcaoMHu+aElE0i+S1eI5l
17+
pmoT42G/L8dLKTbxrLOmbGsEG3OaS8uUZAOfPsrYSPojhqZmye1qTdCAC7YOLxMb
18+
xb4KhZzdxB1f1wN3coNf7+5keG2DDF3LqvL8Z0EnpBIh61tcHAEuTJn3eabk247x
19+
mp/Wpg8ovQKBgE3HZbnaEiS5Ily/1bkXp0quW1cyPurmSgXDcMKvrqxkTVqvAt/h
20+
gAg5mazP0bwh1pEYCF8yF37LXWSU2oH2QyofCVzegfp3P/IyUmGd1N05B8HVwDek
21+
C/OpuZ6QUWDieV7PXfzeU5TGl6dI2Iyr61S4M7ZpD3Acw+XXP+MGy3qhAoGAQA0y
22+
7MXi7WiB9VBVSTS5cKo4NRlTPx2d5q40t4Ge88LW/GaeImTLIqb996kMtlzg5KkS
23+
zDINm82gY0bVUIm8DAa8fcWphOFAp9BXifbGyhQtScHM7g2GWH6EM0myeEh6Vlg9
24+
N2qK0/AGTBidRq3h3Gy/N4n2+7xW6p5fMNpbLk0CgYEAmXUgGU+IcppI9i7IiQFg
25+
Yxv409dB2AqnMa97FUonHchE7S4EL8nlnDX2ROB5laNE9CzXEf0HBUG7gmf/DT+L
26+
ULvGGa63mCrcPb+QwNbMhxELj4pSOEniWHJk+xXcROMbqj1h3+eDvhlY5SXonuN2
27+
INuieGa13VZLOCSs0ERxuts=
28+
-----END PRIVATE KEY-----

server/pbenchinacan/run-pbench-in-a-can

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/bin/bash -e
2+
# shellcheck disable=SC2086,2174
23

34
#
45
# Run a local containerized deployment of the Pbench Server, together with its
@@ -26,6 +27,10 @@ export PB_DASHBOARD_DIR="${PB_DASHBOARD_DIR:-${PWD}/dashboard/build/}"
2627
export KEYCLOAK_REALM=${KEYCLOAK_REALM:-"pbench-server"}
2728
export KEYCLOAK_CLIENT=${KEYCLOAK_CLIENT:-"pbench-client"}
2829

30+
host_name=${PB_HOST_NAME:-$(hostname --fqdn)}
31+
host_ip_list=${PB_HOST_IP:-$(hostname -I)}
32+
host_ip=${host_ip_list%% *}
33+
2934
# Set up TMP_DIR, if it's not already defined, to point to WORKSPACE_TMP, if it
3035
# is defined (e.g., by the CI), or to `/var/tmp/pbench` as a fallback.
3136
#
@@ -45,7 +50,7 @@ export PB_DEPLOY_FILES=${PB_DEPLOY_FILES:-${TMP_DIR}/pbench_server_deployment}
4550

4651
# Copy the deployment files to the deployment files directory
4752
pbiac_etc=server/pbenchinacan/etc
48-
rm -rf ${PB_DEPLOY_FILES}/etc ${PB_DEPLOY_FILES}/pbench-server.cfg
53+
rm -rf ${PB_DEPLOY_FILES:?}/etc ${PB_DEPLOY_FILES}/pbench-server.cfg
4954
mkdir -p -m 755 ${PB_DEPLOY_FILES}/etc
5055
cp -r ${pbiac_etc}/rsyslog.d ${pbiac_etc}/rsyslog.conf ${PB_DEPLOY_FILES}/etc/
5156
cp ${pbiac_etc}/pbench-server/pbench-server.cfg ${PB_DEPLOY_FILES}/
@@ -91,6 +96,30 @@ podman run \
9196
${PB_SERVER_IMAGE} \
9297
-c "chown -R pbench:pbench /srv/pbench/*"
9398

99+
# Create a private key and certificate, signed by our own, private CA, for the
100+
# Pbench Server to use to provide SSL connections. The certificate has to
101+
# match the host that the container is running on, so we generate it on the fly
102+
# and place it in the deployment files directory.
103+
#
104+
# We do this in the Pbench Server container so that we get a known version of
105+
# openssl (the native one on the Jenkins executors appears to be ancient).
106+
podman run \
107+
--rm \
108+
--volume ${PB_DEPLOY_FILES}:/data:Z \
109+
--volume ${PWD}/${pbiac_etc}/pki/tls:/pki_tls:Z \
110+
--entrypoint /usr/bin/openssl \
111+
${PB_SERVER_IMAGE} \
112+
req -batch -new -noenc -sha256 -days 365 -newkey rsa:2048 \
113+
-out /data/pbench-server.crt \
114+
-keyout /data/pbench-server.key \
115+
-subj "/C=US/ST=Massachusetts/L=Westford/O=Red Hat/OU=Performance & Scale/CN=${host_name}" \
116+
-CA /pki_tls/certs/pbench_CA.crt \
117+
-CAkey /pki_tls/private/pbench_CA.key \
118+
-addext "authorityKeyIdentifier = keyid,issuer" \
119+
-addext "basicConstraints=CA:FALSE" \
120+
-addext "keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment" \
121+
-addext "subjectAltName = IP.2:${host_ip}"
122+
94123
#+
95124
# Start the services which the Pbench Server depends upon and then start the
96125
# Pbench Server itself.

0 commit comments

Comments
 (0)