본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

OpenSSL은 SSL/TLS 프로토콜과 범용 암호 알고리즘을 구현한 오픈 소스 라이브러리이자, 그 기능을 쓰는 명령행 도구 openssl 이다.

OpenSSL 은 에릭 영(Eric Young)과 팀 허드슨(Tim Hudson)이 만든 SSLeay 를 이어받아 1998년에 시작되었다. 아파치·Nginx 같은 웹 서버, 메일 서버, OpenSSH, 각종 리눅스 배포판이 이 라이브러리로 암호 통신을 한다. 그래서 OpenSSL 에 취약점이 나오면 그 위에서 도는 서비스가 한꺼번에 영향을 받는다. 2014년 하트블리드가 대표적인 예다.

구성은 크게 둘이다.

  • libssl : SSL/TLS 프로토콜 구현
  • libcrypto : 대칭키·공개키 암호, 해시, 난수, 인증서(X.509) 처리 같은 범용 암호 기능
버전 나온 해 내용
0.9.8 2005 오래 쓰인 계열. 하트비트 기능이 없어 하트블리드와 무관하다
1.0.0 2010 하트블리드와 무관하다
1.0.1 2012 TLS 1.1·1.2 지원, 하트비트 확장(RFC 6520) 추가. 1.0.1 ~ 1.0.1f 가 하트블리드에 취약하고 1.0.1g(2014년 4월)에서 고쳐졌다
1.0.2 2015 1.0.2 정식판부터는 하트블리드 수정이 들어 있다
1.1.1 2018 TLS 1.3 지원. 장기 지원(LTS) 판이었고 2023년 9월에 지원이 끝났다
3.0 2021 프로바이더 구조, 라이선스를 아파치 라이선스 2.0 으로 바꿈
  • 지원이 끝난 판은 보안 패치가 나오지 않으므로 운영 서버에서 쓰지 않는다.
  • 하트블리드 이후 OpenSSL 에서 갈라져 나온 라이브러리로 LibreSSL(OpenBSD), BoringSSL(구글)이 있다.
명령 하는 일
openssl version -a 설치된 OpenSSL 버전, 빌드 날짜, 컴파일 옵션을 보여 준다. 취약 버전 점검의 첫 단계다
openssl s_client -connect 호스트:포트 TLS 클라이언트로 서버에 접속해 핸드셰이크·인증서·암호 스위트를 확인한다. -tlsextdebug 를 붙이면 서버가 보낸 TLS 확장을 출력한다
openssl req 인증서 서명 요청(CSR)이나 자체 서명 인증서를 만든다
openssl x509 인증서 내용(발급자, 유효기간, 공개키)을 출력·변환한다
openssl genpkey, genrsa 개인키를 만든다
openssl enc 대칭키로 파일을 암호화·복호화한다
openssl dgst 해시값·전자서명을 만든다
openssl ciphers 지원하는 암호 스위트 목록을 보여 준다

하트블리드 점검 예

편집 원본 편집
# openssl version -a
OpenSSL 1.0.1 14 May 2012
# openssl s_client -connect domain.com:8443 -tlsextdebug -state | grep -i heartbeat
TLS server extension "heartbeat" (id=15), len=1
  • 버전이 1.0.1 ~ 1.0.1f 이고, 서버가 heartbeat 확장(id=15)을 응답하면 하트블리드에 취약하다고 판단한다.
  • 조치는 1.0.1g 이상으로 올리거나, 바로 올릴 수 없으면 -DOPENSSL_NO_HEARTBEATS 옵션으로 다시 컴파일해 하트비트를 끄는 것이다. 자세한 것은 하트블리드 문서에 있다.
  • 「OpenSSL Security Advisory [07 Apr 2014] TLS heartbeat read overrun (CVE-2014-0160)」, OpenSSL Project, 2014.
  • 「RFC 6520: Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension」, IETF, 2012.