[python] M2Crypto를 사용하여 SSL/TLS 서버에서 클라이언트 인증서 검증하는 방법은 어떻게 되나요?
먼저, 클라이언트에서 제공된 인증서를 검증하는 서버 측 파이썬 코드를 작성해봅시다.
- 우선, M2Crypto를 설치해야 합니다. 아래 명령을 사용하여 M2Crypto를 설치할 수 있습니다.
pip install M2Crypto
- 다음은 서버 측 파이썬 코드의 예제입니다. 이 코드는 SSL/TLS 서버를 설정하고 클라이언트 인증서를 검증합니다.
from M2Crypto import SSL, X509
def verify_callback(connection, x509, errnum, errdepth, ok):
if not ok:
print(f"인증서 유효성 검사 실패: {errnum}, {errdepth}, {x509.get_subject().as_text()}")
return False
return True
ctx = SSL.Context('tlsv1_2')
ctx.load_cert('server_cert.pem', 'server_key.pem')
ctx.load_verify_locations(cafile='ca_cert.pem')
ctx.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, depth=9, callback=verify_callback)
server = SSL.Connection(ctx)
server.bind(('0.0.0.0', 8443))
server.listen(5)
while True:
client_conn = server.accept()
client_conn.set_verify(SSL.verify_peer | SSL.verify_fail_if_no_peer_cert, depth=9, callback=verify_callback)
try:
client_conn.accept()
# 클라이언트 인증 완료
print(f"클라이언트 인증서 검증 성공: {client_conn.get_peer_cert().get_subject().as_text()}")
# 클라이언트와 통신하거나 작업을 수행합니다.
except Exception as e:
print(f"클라이언트 인증서 검증 실패: {e}")
client_conn.close()
위 코드에서 verify_callback
함수는 클라이언트 인증서의 유효성을 확인하는데 사용됩니다. 인증서가 유효하지 않으면 verify_callback
함수가 False
를 반환하여 클라이언트 연결을 거부하게 됩니다. ctx.load_verify_locations
를 사용하여 신뢰할 수 있는 CA 인증서 파일을 설정하고, ctx.set_verify
및 client_conn.set_verify
를 사용하여 클라이언트의 인증을 강제합니다.
이 예제를 사용하여 M2Crypto를 통해 SSL/TLS 서버에서 클라이언트 인증서를 검증할 수 있습니다. 필요에 따라 위 코드를 수정하여 자신의 환경에 맞게 적용할 수 있습니다.