
OpenSSL
오픈에스에스엘
은 와 여러 암호 기능을 제공하는 라이브러리 및 명령줄 도구 모음이다. 인증서 생성·내용 확인·검증과 실제 서버의 설정은 별도의 단계로 다루어야 한다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
로고: OpenSSL 공식 자료. 제품 식별을 위해 표시하며 각 상표의 권리는 권리자에게 있습니다.
01무엇이고, 어떤 일을 하나
- 인증서·공개키·개인키의 형식과 필드를 확인한다.
- ·체인·서명 등 암호 자료를 처리한다.
- 연결 오류를 알고리즘·신뢰 경로·서버 이름 조건으로 나눠 진단한다.
02어떤 순서로 동작하나
- 입력 자료 구분
인증서··공개키·개인키 중 무엇을 읽는지 확인하고 파일 형식을 맞춘다. 확장자만으로 안의 자료 종류를 확정하지 않는다.
- 구조 해석
Subject·Issuer·SAN·유효기간·Key Usage 등 목적에 필요한 필드를 읽는다. 자기 서명 인증서의 수학적 검증과 사전 신뢰는 별개다.
- 문맥 검증
검증 시 사용할 신뢰 앵커·중간 인증서·서버 이름·용도를 정한다. 단순 인증서 덤프 화면은 실제 접속 대상 인증 검증 결과와 다르다.
- 운영 반영 대조
서버가 실제 제공하는 체인과 개인키 일치·지원 프로토콜·재적용 상태를 확인한다. 빌드 헤더와 런타임 라이브러리 버전도 장애 원인이 될 수 있다.
03먼저 알아둘 용어와 구성요소
- 암호 알고리즘과 관련 처리 기능을 제공하는 라이브러리.
- 프로토콜 기능을 제공하는 라이브러리.
- 등의 바이트를 와 경계 표식으로 감싼 텍스트 표현.
- 3 계열에서 알고리즘 구현 등을 제공하는 모듈 구조.
- ASN.1 자료의 정규화된 이진 인코딩.
- 개인키로 서명하여 공개키와 신청 정보를 전달하는 인증서 발급 요청.
RSA 과제의 modulus와 서명 입력 바이트 읽기
modulus를 공개키 전체와 혼동하지 않고, 공개키 추출·서명·검증을 서로 다른 작업으로 구분한다.
실습 구성과 전제
- 의 교육용 키 또는 자신이 만든 폐기 가능한 실습 키만 사용한다.
- 작업 폴더에 키와 메시지를 분리해 저장하고 실제 운영 개인키는 가져오지 않는다.
과제가 요구하는 값을 구분한다
- 공개키에는 modulus n과 공개 지수 e가 필요하다. modulus의 16진수 문자열만 저장한 파일은 일반적인 공개키 파일이 아니다.
- 문제는 modulus 문자열을 구한 다음 그 문자열에 서명하라고 요청한다. 키를 암호화하는 작업이나 modulus 자체를 공개키 인증서로 바꾸는 작업이 아니다.
shellopenssl rsa -in lab-private.pem -modulus -noout openssl pkey -in lab-private.pem -pubout -out lab-public.pem자신의 폐기 가능한 실습 키에서 modulus를 조회하고 공개키를 추출한다.
원본 크기로 보기 ↗- 화면은 개인 RSA 키를 교육용 입력으로 주고 modulus의 16진수 표현과 서명을 각각 요구한다.
- BEGIN PRIVATE KEY 표시는 PEM 컨테이너의 시작이며, 답안 입력칸 두 개는 서로 다른 결과물을 받는다.
확인 기준n만 추출한 파일과 공개키 파일을 이름부터 다르게 관리한다.
서명할 메시지의 바이트를 고정한다
- 과제가 정한 16진수 대소문자·접두사·개행 포함 여부를 먼저 확인한다. 보이는 글자가 같아도 마지막 LF가 있으면 해시 입력이 달라진다.
- 서명은 개인키로 수행하고 검증은 공개키로 수행한다. 는 생성된 서명 바이트를 답안에 넣기 쉬운 문자열로 바꾸는 표현이다.
shellopenssl dgst -sha256 -sign lab-private.pem -out signature.bin message.txt openssl dgst -sha256 -verify lab-public.pem -signature signature.bin message.txt메시지 파일을 중간에 수정하지 않고 서명·검증한다. 사진의 개인키 값은 재사용하지 않는다.
확인 기준서명 검증이 실패하면 키 쌍과 함께 메시지 파일의 실제 바이트를 비교한다.
키 소유 증명과 신원 신뢰를 나눈다
- 서명이 맞다는 것은 해당 공개키에 대응하는 개인키가 사용됐다는 증거다. 그 키가 누구의 것인지는 별도의 신뢰 관계가 필요하다.
- 인증서 체인은 공개키를 이름·용도·기간과 묶는다. 서명 과제와 인증서 검증 도해는 서로 다른 단계의 비교 자료다.
원본 크기로 보기 ↗- 서버 인증서 위에 Intermediate CA와 Root CA가 연결돼 있다.
- 오른쪽에는 서버 이름·유효기간·용도·폐기 상태가 따로 나열되어, 서명 확인만으로 검증이 끝나지 않음을 보여 준다.
확인 기준서명 성공을 곧바로 서버 신뢰 성공으로 보고하지 않는다.
실습에서 확인한 동작 원리
- modulus는 공개키의 한 구성 요소다.
- 서명은 메시지의 정확한 바이트와 키 쌍에 의존한다.
브라우저 인증서 경고를 체인·이름·기간으로 나누기
HTTPS 경고를 무조건 암호화 실패로 해석하지 않고 신뢰 검증의 실패 지점을 찾는다.
실습 구성과 전제
- 자신이 관리하는 실습 HTTPS 서버와 서버 인증서·중간 CA·실습 CA 파일을 준비한다.
- 아래 도해와 브라우저 경고는 검증 원리와 실제 오류의 비교 자료이며 같은 서버의 연속 실행 증거가 아니다.
브라우저가 어떤 검증에서 멈췄는지 읽는다
- 오류 코드와 접속 이름을 먼저 기록한다. NET::ERR_CERT_AUTHORITY_INVALID는 신뢰 가능한 발급 경로를 만들지 못했음을 조사할 출발점이다.
- 원인은 신뢰 저장소에 없는 CA, 누락된 중간 인증서 등일 수 있다. 화면 하나로 개인키 손상이나 서버 침해를 확정하지 않는다.
원본 크기로 보기 ↗- 주소는 HTTPS로 시작하지만 브라우저에 '연결이 비공개로 설정되어 있지 않습니다'가 표시된다.
- 오류 코드가 NET::ERR_CERT_AUTHORITY_INVALID이므로 단순 HTTP 미사용 여부와 CA 신뢰 문제를 구분해야 한다.
확인 기준경고를 무시해 접속하는 것을 해결로 기록하지 않는다.
인증서 필드와 체인을 따로 검사한다
- Subject·Issuer는 표시 이름이며, 실제 서버 이름 비교에는 SAN을 본다. 기간은 현재 시계와 Not Before·Not After를 비교한다.
- 신뢰 앵커는 클라이언트가 신뢰하도록 설정한 값이다. 서버가 루트 인증서를 함께 보낸다는 사실만으로 신뢰가 생기지 않는다.
shellopenssl x509 -in server.pem -noout -subject -issuer -dates -ext subjectAltName openssl verify -CAfile lab-root.pem -untrusted intermediates.pem -verify_hostname lab.example server.pem보유한 인증서 파일을 로컬에서 검사하는 예시. lab.example은 실제 시험 이름으로 바꾼다.
원본 크기로 보기 ↗- 체인은 Root CA→Intermediate CA→서버 인증서로 그려져 있다.
- 검증 항목은 서명 체인 외에 서버 이름·기간·용도 제한·폐기 상태를 포함한다.
확인 기준체인 검증 성공과 이름 검증 성공을 각각 기록한다.
수정한 조건만 재시험한다
- 누락된 중간 인증서를 보완했다면 서버가 보내는 체인을 다시 확인한다. 실습 CA 신뢰를 추가했다면 그 클라이언트의 신뢰 저장소 변경 범위를 기록한다.
- 이름이나 만료 조건까지 동시에 바꾸면 어느 변경이 경고를 없앴는지 알기 어렵다. 각 실패 조건을 분리해 재시험한다.
확인 기준체인·SAN·기간이 모두 맞는 상태에서만 정상으로 판정한다.
실습에서 확인한 동작 원리
- HTTPS 사용과 인증서 신뢰 성공은 별개다.
- 오류 코드를 검증 조건에 연결하면 불필요한 설정 변경을 줄일 수 있다.
04예제로 따라가기
- 인증서에 기대한 이름의 SAN이 없으면 체인의 서명이 맞아도 호스트 이름 검증이 실패할 수 있다.
- 파일 안의 CERTIFICATE와 PRIVATE KEY 표식은 다른 종류의 내용을 뜻하며 공개 범위도 다르다.
- 라이브러리 버전 불일치 경고가 나타나면 암호문 문제로 단정하기 전에 프로그램과 로드된 라이브러리의 호환 관계를 확인한다.
05혼동하기 쉬운 점과 확인 기준
- 개인키에 암호를 걸지 않는 옵션을 모든 서버의 기본 권장으로 복사하지 않는다. 서비스 실행과 키 보관 정책을 함께 결정한다.
- 1.x·3.x의 옵션·지원 알고리즘·가 달라질 수 있으므로 오래된 명령의 성공 여부와 보안성을 분리한다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.