HTTPS for web server in Raspberry Pi - Time & Space Complexity
When setting up HTTPS on a Raspberry Pi web server, it's important to understand how the time to handle requests grows as more users connect.
We want to see how the server's work changes when it encrypts and decrypts data for each visitor.
Analyze the time complexity of the HTTPS handshake and request handling code.
import ssl
import socket
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile='cert.pem', keyfile='key.pem')
with socket.socket() as sock:
sock.bind(('0.0.0.0', 443))
sock.listen(5)
while True:
client, addr = sock.accept()
with context.wrap_socket(client, server_side=True) as ssock:
data = ssock.recv(1024)
ssock.sendall(b'HTTP/1.1 200 OK\r\n\r\nHello HTTPS')
This code sets up a simple HTTPS server that accepts connections, performs SSL handshake, receives data, and sends a response.
Look at what repeats as more clients connect.
- Primary operation: The server accepts connections and performs SSL handshake for each client.
- How many times: Once per client connection, repeating indefinitely.
Each new client causes the server to do a handshake and handle a request.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 clients | 10 handshakes + 10 request processes |
| 100 clients | 100 handshakes + 100 request processes |
| 1000 clients | 1000 handshakes + 1000 request processes |
Pattern observation: The work grows directly with the number of clients; more clients mean more handshakes and processing.
Time Complexity: O(n)
This means the server's work grows linearly with the number of client connections it handles.
[X] Wrong: "The SSL handshake happens once and then all clients share it."
[OK] Correct: Each client must do its own handshake to securely connect, so the server repeats this work for every new client.
Understanding how HTTPS affects server workload helps you explain real-world server behavior and scalability in interviews.
"What if the server used persistent connections to keep clients connected longer? How would the time complexity change?"
Practice
Solution
Step 1: Understand HTTPS function
HTTPS encrypts data between the user and the server to protect privacy and security.Step 2: Compare options
Only To encrypt data and keep the website safe correctly describes HTTPS purpose; others are unrelated to encryption.Final Answer:
To encrypt data and keep the website safe -> Option DQuick Check:
HTTPS = encrypt data [OK]
- Thinking HTTPS speeds up the website
- Confusing HTTPS with website design
- Believing HTTPS increases user capacity
Solution
Step 1: Recall correct systemctl syntax
The command to stop a service is 'sudo systemctl stop servicename'.Step 2: Identify correct option
sudo systemctl stop apache2 matches the correct syntax to stop Apache2; others are invalid commands.Final Answer:
sudo systemctl stop apache2 -> Option AQuick Check:
Stop service = sudo systemctl stop [OK]
- Using incorrect command order
- Omitting 'sudo' for permissions
- Using 'start' instead of 'stop'
sudo certbot --apache
Solution
Step 1: Understand Certbot command
The command 'sudo certbot --apache' requests and installs SSL certificates automatically for Apache.Step 2: Evaluate options
Only It automatically obtains and installs an SSL certificate for Apache correctly describes the expected behavior; others are incorrect or false.Final Answer:
It automatically obtains and installs an SSL certificate for Apache -> Option AQuick Check:
Certbot --apache = get SSL cert [OK]
- Thinking Certbot deletes files
- Assuming Certbot starts server
- Believing Certbot is incompatible with Apache
Solution
Step 1: Understand port usage during certificate request
Certbot needs to use port 80 to verify domain ownership, but Apache uses it if running.Step 2: Identify error from port conflict
If Apache is not stopped, Certbot cannot bind port 80, causing 'Port 80 is already in use' error.Final Answer:
Port 80 is already in use error -> Option CQuick Check:
Apache running blocks port 80 for Certbot [OK]
- Ignoring need to stop Apache
- Expecting success without stopping server
- Confusing error with internet issues
Solution
Step 1: Open firewall port 443 for HTTPS
Before restarting Apache, ensure firewall allows HTTPS traffic on port 443.Step 2: Restart Apache to apply SSL certificate
Restarting Apache activates the new SSL certificate and enables HTTPS.Final Answer:
Configure firewall to allow port 443, then restart Apache -> Option BQuick Check:
Firewall open 443, then restart Apache [OK]
- Restarting Apache before opening firewall port
- Assuming no firewall changes needed
- Believing HTTPS works without restart
Ready to prove it?
Pass the test and this pattern moves unknown
