OpenSSL
IT위키
더 많은 작업
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.