안녕하세요. pitang입니다.
24년 첫 글이네요 OpenSSL에 대해서 알아보려 합니다.
알아보기 전
SSL
Secure Sockets Layer의 약자이다.
인터넷 상의 보안 통신 표준이고, 데이터 암호화와 프로토콜을 통합한다.
데이터는 컴퓨터를 떠나기 전에 암호화 되고, 목적지에 도착하면 암호가 해독된다.
인증과 암호 알고리즘이 뒤를 받치고 있고, OpenSSL에서는 이 두가지 모두를 사용할 수 있다.
모든 종류의 연결에 SSL을 사용할 필요는 없고, 연결이 중요한 정보를 전달할 경우에만 사용되어야 한다.
TLS
Transport Layer Security의 약자이다. 그리고 SSL 프로토콜의 후속 버전이다.
네트워크 통신에서 보안과 데이터 무결성을 제공하는 프로토콜이다.
TLS의 주요 목표 : 기밀성, 무결성, 인증
대칭키 암호화와 공개키 암호화를 조합하여 데이터를 암호화하고 전송한다.
OpenSSL
오픈 소스의 암호 라이브러리 및 툴킷으로, 다양한 프로토콜의 암호화 및 복호화, 디지털 서명, SSL/TLS 프로토콜의 구현 등을 제공하는 툴이다. 단순한 API 이상, 명령행 툴이다.
주로 보안 프로토콜을 구현하고 암호화 통신을 위해 사용된다.
- 주요 기능과 용도
1. SSL/TLS 프로토콜 구현
: OpenSSL은 SSL 및 TLS 프로토콜의 구현을 제공하여 안전한 통신을 할 수 있도록 한다.
웹 서버 및 클라이언트 간의 보안 통신을 위해 주로 사용된다.
2. 암호화 및 복호화
: OpenSSL은 다양한 암호화 알고리즘을 지원한다.
3. 디지털 서명 및 해시
: OpenSSL은 디지털 서명 생성 및 검증, 해시 함수를 제공하여 데이터 무결성을 유지하고 인증할 수 있다.
4. 인증서 관리
: OpenSSL을 사용하여 X.509 형식의 디지털 인증서를 생성하고 관리할 수 있다.
5. 랜덤 데이터 생성
: 랜덤 데이터를 생성하는 기능을 제공하여 암호화 키 및 초기확 벡터 등을 안전하게 생성할 수 있다.
6. 다양한 플랫폼에서의 이식성
: OpenSSL은 다양한 운영 체제와 플랫폼에서 사용할 수 있도록 이식성이 높게 설계되어있다.
4. 인증서 관리에 대해 자세히 알아보고자 한다...!
웹 사이트를 이용할 때 http:// 대신 https:// 가 적용되어 있다면 SSL 인증서가 적용된 웹 사이즈!
프로젝트내에서 웹소켓으로 https:// 로 통신해야할 상황이 생겼는데 ws가 아닌 wss로 통신해야하면서 발생한 개념정리
OpenSSL - 인증서 관리
디지털 인증서를 생성, 관리 및 유지하는 과정을 의미하는데
공개 키 암호화 기술을 기반으로 하여 인증된 엔터티의 신원을 확인하고 안전한 통신을 위한 키 교환에 사용된다.
1. 인증 기관(CA) 역할 수행
OpenSSL을 사용하여 자체 서명된 루트 인증 기관을 만들고, 필요에 따라 하위 CA(Certificate Authority)를 만들어 인증서를 발급할 수 있다.
2. 인증서 요청 생성
openssl req 명령어를 사용하여 새로운 인증서 요청 (CSR)을 생성할 수 있다.
CSR은 개인 키와 함께 제출되어 인증 기관이 서명하도록 하여 새로운 디지털 인증서를 얻을 수 있다.
openssl req -newkey rsa:2048 -keyout private_key.pem -out csr.pem
3. 인증서 서명
CA가 CSR을 받아들이면, opssl x509 명령어를 사용하여 CSR을 서명하고 새로운 디지털 인증서를 생성할 수 있다.
openssl x509 -req -in csr.pem -signkey private_key.pem -out certificate.pem
4. 인증서 체인 구성
CA는 다수의 인증서를 계층적으로 구성할 수 있다.
openssl 명령어를 사용하여 CA인증서와 중간 CA 인증서를 연결하여 인증서 체인을 생성할 수 있다.
cat intermediate_cert.pem ca_cert.pem > certificate_chain.pem
5. 인증서 검증
openssl verify 명령어를 사용하여 특정 인증서를 검증할 수 있다.
openssl verify -CAfile certificate_chain.pem server_cert.pem
6. 인증서 갱신 및 폐지
인증서의 유효 기간이 만료되면 또는 보안 이슈가 발생하면 인증서를 갱신하거나 폐지할 수 있다.
이를 위해서는 CA의 역할을 하는 특정 키에 엑세스해야 한다.
확장자
디지털 인증서의 확장자는 아래와 같다.
- PEM (Privacy Enhanced Mail): 주로 OpenSSL에서 사용되는 텍스트 기반의 형식이며 .pem 확장자를 가진다.
- CRT (Certificate): 일반적인 디지털 인증서의 확장자로 .crt가 사용된다.
- CER (Certificate): Microsoft에서 주로 사용되며 .cer 확장자를 가진다.
- DER (Distinguished Encoding Rules): 이진 형식으로 인코딩된 형식이며 .der 확장자를 가진다.
- PFX (Personal Information Exchange): 주로 Windows 운영체제에서 사용되는 인증서 저장 및 교환 목적에 사용된다. 개인 및 공용 키 쌍을 효율적으로 저장하고 전송하는데 유용하며, 웹 서버, VPN, 이메일 서버 등에서 SSL/TLS 인증서 및 개인 키를 관리하는데 자주 사용된다.
인증서가 어떤 형식으로 저장되었느냐에 따라 확장자가 결정된다.
예시
// "OPENSSL_CONF" 환경변수 설정 부분
set OPENSSL_CONF=D:\pFiles\openssl-3\ssl\openssl.cnf
// 인증서 및 개인 키 생성
openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes -keyout temp.key -out temp.crt
-subj "/CN=localhost" -addext "subjectAltName=DNS:localhost" -addext "extendedKeyUsage=serverAuth,clientAuth" -addext "keyUsage=digitalSignature,keyEncipherment" -addext "basicConstraints=CA:false"
// PFX 파일 생성
openssl pkcs12 -export -in temp.crt -inkey temp.key -out temp.pfx
// PFX 파일 정보 확인
openssl pkcs12 -info -nodes -in temp.pfx
인증서 및 개인 키 생성 부분에서 새로운 키만 생성하겠다는 명령어만 쓴다면 몇 가지 정보를 같이 입력하게 UI가 나온다.
나라나 소속 등 입력하게 나오지만 사설 인증서라면 자유롭게 작성해도 괜찮다!
-addext 옵션을 사용하게 되면 위 설명과 같은 정보를 입력하는 란은 나오지 않는다.
-addext 옵션은 OpenSSL 명령어에서 사용되는 옵션, X.509 인증서의 확장을 추가하는데 사용된다.
위에서는 SAN(Subject Alternative Name, SAN), Key Usage, Extended Key Usage 등을 설정하고 있다.
위 생성 과정 중 CSR은 생성하지 않았다.
CSR이란? Certificate Signing Request의 약자이고 주로 인증 기관(CA)에게 서명된 디지털 인증서를 발급받기 위한 요청을 하는데 사용된다. 그러나 생성하지 않고 직접 자체 서명된 인증서를 만들 수도 있다. 그걸 가능하게 만들어주는 옵션이 바로 -x509 옵션이다!
실제 서비스 환경에서는 보통 CA에게 서명된 인증서를 발급받기 위해 CSR을 생성하고 제출하는 것이 일반적이다.
<설치부터 생성까지의 과정 => 오타있을 수 있음.....>
// openssl 설치
yum install -y openssl
// openssl 확인
openssl
// CA 개인키 생성
// 공개키 방식 RSA 알고리즘을 통해 2048bit 길이의 CA 개인키 생성
openssl genrsa -out rootCA.key 2048
// CA CSR 생성
// 인증 서명 요청으로 인증서를 발급하는데 필요한 인증 신청서
// 위에서 생성했던 CA 개인키를 통해 CSR 생성
openssl req -new -key rootCA.key -out rootCA.csr
// CA CRT 생성
// CA 인증서 생성
openssl x509 -req -in rootCA.csr -signkey rootCA.key -out rootCA.crt
// 서버 개인키 생성
openssl genrsa -out server.key 2048
// 서버 CSR 생성
openssl req -new -key server.key -out server.csr
// 서버 CRT 생성
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt
'TIL' 카테고리의 다른 글
TIL (2024.03.19) - JavaScript 문법 (Map, Set, Array) (1) | 2024.03.19 |
---|---|
TIL (2024.03.18) - JavaScript 문법 (문자열) (1) | 2024.03.18 |
TIL (2023.09.18) - 통신규약 (2) | 2023.09.18 |
TIL (2023.08.30) (0) | 2023.08.31 |
TIL (2023.08.24) (0) | 2023.08.24 |