Skip to main content

Server Testing

This site demonstrates how to test an OpenSSL server provided by the TLS-Docker-Library.
You can also test other implementations, for example by using the TLS-Docker-Library or by running your own server binary.

Testing the server in its simplest form typically takes around 10-20 minutes.
However, this duration may increase to several hours depending on the strength parameter, which defines how many times each test case is executed with varying parameters.

Preparations

info

The server image we use is prebuilt by us using the TLS-Docker-Library.
We have included certificates in the container, so you do not need to generate them yourself.

For better compatibility, we create a dedicated Docker network that allows TLS-Anvil and the OpenSSL server container to communicate.

docker network create tls-anvil

Starting the OpenSSL Server

info

As mentioned before, we use OpenSSL as an example. In this case, the server uses an RSA certificate. However, TLS-Anvil supports any certificate type and automatically adapts the tests accordingly.

Start the server with the following command. This will download a pre-built image from our GitHub registry and run it.

docker run \
-d \
--rm \
--name openssl-server \
--network tls-anvil \
ghcr.io/tls-attacker/openssl-server:1.1.1i \
-port 8443 \
-cert /certs/rsa2048cert.pem \
-key /certs/rsa2048key.pem
  • Lines 2-5: Docker-related command flags
  • Line 6: Specifies the Docker image from the TLS-Docker-Library
  • Lines 7-9: Flags passed to the OpenSSL s_server binary
note

Note, that if you are using a platform beyond linux/amd64 (e.g., on a Macbook), you might need to use the parameter --platform linux/amd64 to correctly start the image.

Starting TLS-Anvil

Next, start TLS-Anvil. The current directory is mounted into the Docker container to store the results. We connect to the server using its Docker hostname openssl-server, which works because both containers are on the same Docker network.

docker run \
--rm \
-it \
--name tls-anvil \
--network tls-anvil \
-v $(pwd):/output/ \
ghcr.io/tls-attacker/tlsanvil:latest \
-zip \
-parallelHandshakes 1 \
-connectionTimeout 200 \
-strength 1 \
-identifier openssl-server \
server \
-connect openssl-server:8443
  • Lines 2-5: Docker-related command flags
  • Line 6: Mounts the output directory as a Docker volume
  • Line 7: Specifies the TLS-Anvil Docker image
  • Line 8: Compresses the results into a zip archive for easier import into Anvil-Web later
  • Line 9: Since the OpenSSL example server is single-threaded, only one handshake is performed sequentially
  • Line 10: The server runs locally, so the connection timeout is set to 200 ms
  • Line 11: Sets the strength parameter, i.e., the t value for t-way combinatorial testing
  • Line 13: Specifies that we want to test a server
  • Line 14: Details how TLS-Anvil should connect to the server
tip

If you want to connect to a server running on your host machine, and not in another container, you can either use the hostname host.docker.internal or set the docker network to --network host and use localhost as hostname.

What Now?

After the test suite finishes, you should see a folder named Results_... containing all the results.
To analyze them, refer to Viewing Results.