인터넷 통신에서 데이터 보호와 보안성을 제공하기 위해 널리 사용되는 OpenSSL을 통해 TLS 1.2가 적용된 통신을 확인하는 방법이 있습니다.
1. OpenSSL을 사용하여 서버에 연결 테스트
openssl s_client 명령어를 사용하면 서버와의 TLS 연결을 테스트할 수 있습니다. 이 명령어를 통해 SSL/TLS 연결의 세부 정보를 확인할 수 있습니다. 다음은 서버와 연결을 시도하는 명령어입니다
openssl s_client -connect <서버 주소>:<포트> -tls1_2
예를 들어, example.com 웹사이트의 443 포트로 TLS 1.2를 사용하여 연결을 시도하려면 다음과 같습니다
openssl s_client -connect example.com:443 -tls1_2
2. 서버의 TLS 버전 및 연결 세부 정보 확인
서버와의 연결 후, SSL/TLS 연결의 세부 정보가 출력됩니다. 주요 정보를 하나씩 살펴보겠습니다.
2.1. 서버 인증서 확인
연결이 성립되면 서버 인증서와 인증서 체인을 볼 수 있습니다. 이는 다음과 같이 출력됩니다.
Certificate chain
0 s:CN = example.com
i:C = US, O = Let's Encrypt, CN = R3
1 s:C = US, O = Let's Encrypt, CN = R3
i:O = Digital Signature Trust Co., CN = DST Root CA X3
- s:는 서브젝트(subject)를 나타내며, 이는 인증서가 발급된 대상의 정보를 나타냅니다.
- i:는 발급자(issuer)를 나타내며, 이는 인증서를 발급한 기관의 정보를 나타냅니다.
2.2. 서버 인증서 정보
서버 인증서의 상세 정보는 다음과 같이 표시됩니다.
Server certificate
-----BEGIN CERTIFICATE-----
MIIF...
-----END CERTIFICATE-----
subject=CN = example.com
issuer=C = US, O = Let's Encrypt, CN = R3
이 부분에서는 인증서의 서브젝트와 발급자 정보, 인증서의 PEM 형식이 포함됩니다.
2.3. SSL/TLS 연결 세부 정보
연결된 SSL/TLS 세션의 정보는 다음과 같이 표시됩니다.
SSL handshake has read 3289 bytes and written 454 bytes
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 85D2...
Session-ID-ctx:
Master-Key: 43B...
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1615371084
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
주요 항목은 다음과 같습니다.
- Protocol: 사용된 TLS 버전 (TLSv1.2)
- Cipher: 사용된 암호화 방식 (ECDHE-RSA-AES256-GCM-SHA384)
- Session-ID: 세션의 고유 ID
- Master-Key: 세션을 보호하기 위해 사용되는 주요 암호화 키
- Server public key: 서버의 공개 키 정보 (2048비트)
- Secure Renegotiation: 안전한 재협상 지원 여부
- Compression: 압축 방식 (NONE)
- Verify return code: 인증서 검증 결과 (0은 성공)
2.4. 추가 정보 확인
연결 세부 정보 외에도 다음과 같은 정보를 확인할 수 있습니다.
- 서버의 암호화 지원 상태: 서버가 지원하는 암호화 방식 및 프로토콜 버전
- 인증서 체인: 서버 인증서와 루트 인증서까지의 체인
- 인증서 유효 기간: 인증서의 발급일과 만료일
- 주체 정보: 인증서의 주체(서버)의 상세 정보 (도메인, 조직, 위치 등)
예시
실제 openssl s_client 명령어 실행 예시는 다음과 같습니다.
openssl s_client -connect example.com:443 -tls1_2
출력 예시:
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = R3
verify return:1
depth=0 CN = example.com
verify return:1
---
Certificate chain
0 s:CN = example.com
i:C = US, O = Let's Encrypt, CN = R3
1 s:C = US, O = Let's Encrypt, CN = R3
i:O = Digital Signature Trust Co., CN = DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIF...
-----END CERTIFICATE-----
subject=CN = example.com
issuer=C = US, O = Let's Encrypt, CN = R3
---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3289 bytes and written 454 bytes
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 85D2...
Session-ID-ctx:
Master-Key: 43B...
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1615371084
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
위 정보를 통해 서버가 TLS 1.2를 사용하고 있는지, 어떤 암호화 방식과 공개 키를 사용하는지, 인증서가 유효한지 등을 확인할 수 있습니다.
결론
위와 같이, OpenSSL을 활용하면 서버와의 TLS 연결을 쉽게 확인할 수 있으며 이를 통해 보안성을 더욱 강화할 수 있습니다.
아마도 가장 쉽게 SSL 통신을 확인하는 방법이니, 잘 활용해 보시기 바랍니다.
'IT > WEBWAS' 카테고리의 다른 글
CORS의 정의와 문제 해결 방법: 로드밸런서와 OPTIONS 메서드 활용 (2) | 2024.09.11 |
---|---|
Why Nginx? Nginx 사용 이유 (0) | 2024.08.14 |
DDoS 공격에 대한 이해와 방어 방법 (0) | 2024.08.13 |
OpenTelemetry로 EC2에 배포된 Java 애플리케이션 모니터링하기 (0) | 2024.07.24 |
서버 부하 테스트용 모듈 stress (0) | 2024.07.17 |