OpenSSL을 사용한 TLS 1.2 연결 확인 방법
인터넷 통신에서 데이터 보호와 보안성을 제공하기 위해 널리 사용되는 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 통신을 확인하는 방법이니, 잘 활용해 보시기 바랍니다.