IT/WEBWAS

OpenSSL을 사용한 TLS 1.2 연결 확인 방법

동구멍폴로 2024. 8. 13. 23:18
반응형

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

반응형