q1: ssl 모듈을 사용하여 SSL/TLS를 적용한 소켓 통신을 구현한 python 예제

a1:

SSL/TLS는 인터넷에서 데이터를 안전하게 전송하기 위해 널리 사용되는 프로토콜입니다. 파이썬에서는 ssl 모듈을 사용하여 SSL/TLS를 적용한 소켓 통신을 구현할 수 있습니다.

SSL/TLS 클라이언트 예제:

아래는 파이썬에서 SSL/TLS를 사용하여 HTTPS 서버에 연결하는 클라이언트 예제입니다.

import socket
import ssl

# 접속할 서버의 호스트명과 포트 번호
hostname = 'www.python.org'
port = 443

# 기본 SSL 컨텍스트 생성
context = ssl.create_default_context()

# 소켓 생성 및 SSL 컨텍스트 적용
with socket.create_connection((hostname, port)) as sock:
    with context.wrap_socket(sock, server_hostname=hostname) as ssock:
        # SSL/TLS 버전 출력
        print(f"SSL/TLS 버전: {ssock.version()}")
        # 서버 인증서 출력
        print(f"서버 인증서: {ssock.getpeercert()}")
        # HTTP GET 요청 전송
        request = f"GET / HTTP/1.1\r\nHost: {hostname}\r\n\r\n"
        ssock.send(request.encode())
        # 응답 수신 및 출력
        response = ssock.recv(4096)
        print(response.decode())

설명:
1. 모듈 임포트: socket과 ssl 모듈을 임포트합니다.
2. 서버 정보 설정: 접속할 서버의 호스트명(hostname)과 포트 번호(port)를 설정합니다.
3. SSL 컨텍스트 생성: ssl.create_default_context()를 사용하여 기본 SSL 컨텍스트를 생성합니다.
4. 소켓 생성 및 SSL 적용: socket.create_connection()으로 TCP 소켓을 생성하고, context.wrap_socket()을 사용하여 SSL/TLS를 적용합니다.
5. 서버와 통신: SSL/TLS 연결이 설정되면, 서버에 HTTP GET 요청을 보내고 응답을 수신합니다.

이 예제는 파이썬 공식 문서의 내용을 기반으로 작성되었습니다.  

SSL/TLS 서버 예제:

아래는 파이썬에서 SSL/TLS를 사용하여 간단한 서버를 구현하는 예제입니다.

import socket
import ssl

# 서버 주소와 포트 설정
server_address = ('localhost', 8443)

# SSL 컨텍스트 생성
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)

context.load_cert_chain(certfile='server.crt', keyfile='server.key')

# 소켓 생성 및 바인딩
with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
    sock.bind(server_address)
    sock.listen(5)
    print(f"서버가 {server_address}에서 시작되었습니다.")

    with context.wrap_socket(sock, server_side=True) as ssock:
        conn, addr = ssock.accept()
        print(f"{addr}와 연결되었습니다.")
        data = conn.recv(1024)
        print(f"수신한 데이터: {data.decode()}")
        conn.sendall(b"Hello, SSL/TLS!")

설명:
1. SSL 컨텍스트 생성: ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)를 사용하여 서버용 SSL 컨텍스트를 생성합니다.
2. 인증서 및 키 로드: context.load_cert_chain()을 사용하여 서버의 인증서(server.crt)와 개인 키(server.key)를 로드합니다.
3. 소켓 생성 및 SSL 적용: 일반 TCP 소켓을 생성하고 바인딩한 후, context.wrap_socket()을 사용하여 SSL/TLS를 적용합니다.
4. 클라이언트와 통신: 클라이언트의 연결을 수락하고 데이터를 송수신합니다.

이러한 방식으로 파이썬에서 SSL/TLS를 사용하여 안전한 통신을 구현할 수 있습니다. 추가적인 정보와 예제는 파이썬 공식 문서를 참고하시기 바랍니다.  

반응형

+ Recent posts