在此任务中,我们将实现一个简单的 TLS 服务器。我们使用任务 1 中的客户端程序来测试该服务器程序。下面提供了示例服务器代码。
/* server.py: 在 Labsetup/volumes 文件夹里 */
#!/usr/bin/env python3

import socket
import ssl

html = """
HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n
<!DOCTYPE html><html><body><h1>Hello, world!</h1></body></html>
"""

SERVER_CERT    = './certs/server.crt'
SERVER_PRIVATE = './certs/server.key'

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain(SERVER_CERT, SERVER_PRIVATE)

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
sock.bind(('0.0.0.0', 443))
sock.listen(5)

while True:
    newsock, fromaddr = sock.accept()
    ssock = context.wrap_socket(newsock, server_side=True)

    data = ssock.recv(1024)              # Read data over TLS
    ssock.sendall(html.encode('utf-8'))  # Send data over TLS

    ssock.shutdown(socket.SHUT_RDWR)     # Close the TLS connection
    ssock.close()


测试。我们将使用任务 1 中开发的客户端程序来测试该服务器程序。在任务 1 中,客户端程序从 /etc/ssl/certs 文件夹加载受信任的证书。在此任务中, CA 由我们创建,其证书并未存储在该文件夹中。我们不建议学生将此 CA 添加到该文件夹,因为这会影响整个系统。学生可以将 CA 的证书存储在 ./certs 文件夹中,然后按照任务 1 中的说明设置文件夹。请分别使用 /etc/ssl/certs 文件夹和 ./certs 文件夹测试您的程序,描述你观察到的现象并解释原因。
最后修改: 2025年05月13日 星期二 09:13