[Windows 11] OpenSSL 4.0.2 설치 및 Self-Signed 인증서 생성하기
[Windows 11] OpenSSL 4.0.2 설치 및 Self-Signed 인증서 생성하기
Windows에서 ASP.NET, IIS, HTTPS 개발 환경을 구성하다 보면 OpenSSL을 이용하여 개인키(Private Key), 인증서(Certificate), CSR 등을 생성해야 하는 경우가 있습니다.
이번 글에서는 Windows 11에 OpenSSL 4.0.2를 설치한 후, OpenSSL을 이용하여 Self-Signed Certificate(자체 서명 인증서)를 생성하고 최종적으로 IIS 등에서 사용할 수 있는 PFX 파일까지 만드는 과정을 정리합니다.
- Windows 11에 OpenSSL 4.0.2 설치
- OpenSSL PATH 환경 변수 설정
- OpenSSL 정상 설치 여부 확인
- Self-Signed 인증서 생성
- 개인키와 인증서 확인
- PFX 파일 생성
- 생성된 PFX 파일 검증
1. OpenSSL이란?
OpenSSL은 SSL/TLS 프로토콜과 다양한 암호화 기능을 제공하는 오픈소스 프로젝트입니다.
Windows에서는 주로 openssl.exe 명령줄 도구를 이용하여 다음과 같은 작업을 수행할 수 있습니다.
- SSL/TLS 인증서 확인
- Private Key 생성
- CSR 생성
- Self-Signed Certificate 생성
- 인증서 정보 확인
- PEM / DER 인증서 처리
- PKCS#12 / PFX 파일 생성
- SSL/TLS 연결 테스트
2. Windows용 OpenSSL 다운로드
OpenSSL 프로젝트는 소스 코드를 제공하며 Windows에서 사용할 수 있는 사전 빌드 바이너리는 별도의 배포처에서 제공됩니다.
Windows용 OpenSSL 설치 프로그램은 Shining Light Productions 에서 제공하고 있습니다.
다운로드 페이지
https://slproweb.com/products/Win32OpenSSL.html
현재 Shining Light Productions 다운로드 페이지에서는 OpenSSL 4.0.2가 제공되고 있습니다. 다만 OpenSSL 4.0.x는 LTS(Long Term Support) 계열이 아니며, 해당 페이지에서는 3.5.x를 최신 LTS 계열로 안내하고 있습니다. 따라서 운영 환경에서는 반드시 사용하는 애플리케이션의 OpenSSL 지원 버전을 확인해야 합니다.
3. 어떤 OpenSSL을 다운로드해야 할까?
Windows 11의 일반적인 Intel 또는 AMD 64비트 PC라면 Win64 OpenSSL 계열을 선택합니다.
현재 다운로드 페이지에서 일반적인 명령줄 사용 목적이라면 다음 버전을 사용할 수 있습니다.
Win64 OpenSSL v4.0.2 Light
Light 버전은 일반적인 OpenSSL 명령줄 사용에 적합합니다.
예를 들어 다음과 같은 작업을 수행하는 경우 Light 버전으로 충분한 경우가 많습니다.
- Private Key 생성
- Self-Signed Certificate 생성
- CSR 생성
- 인증서 정보 확인
- PFX 생성
4. Windows 11이 64비트인지 확인하기
OpenSSL을 다운로드하기 전에 현재 Windows의 시스템 종류를 확인합니다.
방법 1. Windows 설정에서 확인
다음 메뉴로 이동합니다.
설정
→ 시스템
→ 정보
→ 시스템 종류
여기에서 64비트 운영 체제인지 확인합니다.
방법 2. PowerShell에서 확인
PowerShell을 실행하고 다음 명령을 입력합니다.
[Environment]::Is64BitOperatingSystem
다음과 같이 출력되면 64비트 운영체제입니다.
True
5. OpenSSL 4.0.2 설치하기
다운로드한 OpenSSL 설치 프로그램을 실행합니다.
설치 파일의 이름은 다운로드한 패키지에 따라 달라질 수 있습니다. 예를 들어 Light 버전은 다음과 같은 형태의 파일명을 사용할 수 있습니다.
Win64OpenSSL_Light-4_0_2.exe
설치 프로그램을 실행하여 설치를 진행합니다.
6. License Agreement
라이선스 동의 화면이 나타나면 내용을 확인한 후 동의하고 다음 단계로 진행합니다.
7. 설치 경로 확인
설치 경로를 지정합니다.
예를 들어 다음과 같은 경로를 사용할 수 있습니다.
C:\Program Files\OpenSSL-Win64
위 경로를 무조건 사용한다고 가정하면 안 됩니다. 설치 프로그램에 실제로 표시되는 설치 경로를 확인하세요. 이후 PATH 환경 변수를 설정할 때도 실제 설치 경로를 사용해야 합니다.
8. 설치 완료
설치 과정을 완료하고 마지막 화면에서 Finish를 클릭합니다.
설치 마지막 화면에 Windows OpenSSL 프로젝트에 대한 기부 옵션이 표시될 수 있습니다.
기부를 하지 않는다면 추가 기부 항목은 선택하지 않은 상태로 두고 Finish를 클릭하면 됩니다.
이 기부 선택은 OpenSSL 설치 자체와는 관계가 없습니다.
9. 새로운 PowerShell 실행
OpenSSL 설치 후 기존에 열려 있던 PowerShell이나 CMD가 있다면 종료합니다.
그 다음 새로운 PowerShell을 실행합니다.
먼저 다음 명령을 실행합니다.
openssl version
정상적으로 PATH가 설정되어 있다면 OpenSSL 버전 정보가 출력됩니다.
설치한 버전이 OpenSSL 4.0.2라면 출력 결과에서 다음과 같은 버전 정보를 확인할 수 있습니다.
OpenSSL 4.0.2 ...
뒤쪽의 빌드 정보는 설치한 Windows 바이너리 패키지에 따라 달라질 수 있습니다.
10. 실제 실행되는 openssl.exe 확인
Windows 개발 PC에는 Git이나 다른 프로그램에 포함된 OpenSSL이 이미 설치되어 있을 수 있습니다.
따라서 현재 어떤 openssl.exe가 실행되는지 확인하는 것이 좋습니다.
PowerShell
Get-Command openssl
CMD
where openssl
예를 들어 다음과 같이 출력될 수 있습니다.
C:\Program Files\OpenSSL-Win64\bin\openssl.exe
만약 여러 개의 경로가 출력된다면 PATH 우선순위에 따라 다른 OpenSSL이 실행될 수 있으므로 주의해야 합니다.
11. OpenSSL PATH 환경 변수 설정
OpenSSL 설치 프로그램이 PATH를 자동으로 설정하지 않았거나,
원하는 OpenSSL을 직접 사용하고 싶다면 PATH에 OpenSSL의 bin 디렉터리를 추가합니다.
예를 들어 실제 설치 구조가 다음과 같다고 가정합니다.
C:\Program Files\OpenSSL-Win64
└─ bin
└─ openssl.exe
이 경우 PATH에 등록할 값은 openssl.exe 파일 자체가 아니라
bin 디렉터리입니다.
C:\Program Files\OpenSSL-Win64\bin
12. Windows 11 환경 변수 화면 열기
Win + R을 누릅니다.
실행 창에 다음을 입력합니다.
sysdm.cpl
Enter를 누릅니다.
시스템 속성에서:
고급
→ 환경 변수
환경 변수 화면에서 Path를 선택하여 OpenSSL의 실제 bin 경로를 추가합니다.
13. PATH 설정 후 터미널 재실행
PATH 환경 변수를 변경했다면 기존 PowerShell이나 CMD를 종료합니다.
그 후 새로운 PowerShell을 실행합니다.
다시 다음 명령을 실행합니다.
openssl version
그리고 실행 파일 위치도 확인합니다.
Get-Command openssl
14. Self-Signed Certificate란?
일반적인 SSL 인증서는 인증기관(CA, Certificate Authority)이 인증서를 발급합니다.
반면 Self-Signed Certificate는 인증서를 사용하는 주체가 자기 자신의 인증서를 직접 서명한 형태입니다.
구조를 단순하게 표현하면 다음과 같습니다.
일반적인 인증서
CA
↓
서버 인증서
Self-Signed Certificate
자기 자신
↓
자기 자신의 인증서
따라서 개발 및 테스트 환경에서 HTTPS를 구성할 때 유용합니다.
Self-Signed Certificate는 일반적인 공인 CA 인증서와 다릅니다. 개발/테스트 환경에서 사용하기 적합하며, 실제 서비스에서는 신뢰할 수 있는 인증기관에서 발급받은 인증서를 사용하는 것이 일반적입니다.
15. 인증서 저장 폴더 만들기
이제 인증서를 저장할 폴더를 하나 만들겠습니다.
PowerShell에서 다음 명령을 실행합니다.
mkdir C:\Certificates
다음 명령으로 해당 폴더로 이동합니다.
cd C:\Certificates
현재 위치를 확인합니다.
Get-Location
현재 위치가 다음과 같으면 됩니다.
C:\Certificates
16. Self-Signed Certificate 생성하기
이제 가장 중요한 단계입니다.
localhost 개발 환경에서 사용할 Self-Signed Certificate를 생성합니다.
PowerShell에서 다음 명령을 실행합니다.
openssl req -x509 -newkey rsa:2048 -noenc -sha256 -days 365 -keyout privkey.pem -out Certificate.crt -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
위 명령은 다음 두 개의 파일을 생성합니다.
privkey.pem
Certificate.crt
17. Self-Signed Certificate 생성 명령어 분석
명령어가 길기 때문에 각각의 옵션을 살펴보겠습니다.
| 옵션 | 설명 |
|---|---|
req |
인증서 요청(CSR) 관련 명령 |
-x509 |
CSR 대신 자체 서명 X.509 인증서 생성 |
-newkey rsa:2048 |
RSA 2048비트 새로운 개인키 생성 |
-noenc |
개인키 자체를 별도 암호화하지 않음 |
-sha256 |
SHA-256 사용 |
-days 365 |
인증서 유효기간 365일 |
-keyout privkey.pem |
개인키를 privkey.pem으로 저장 |
-out Certificate.crt |
인증서를 Certificate.crt로 저장 |
-subj "/CN=localhost" |
인증서의 Common Name을 localhost로 지정 |
-addext |
인증서 확장 항목 추가 |
18. 왜 subjectAltName을 넣는가?
이번 명령에서 중요한 부분 중 하나가 다음 옵션입니다.
-addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
여기에서는 인증서의 SAN(Subject Alternative Name)에 다음 두 값을 넣습니다.
DNS:localhostIP:127.0.0.1
따라서 다음과 같은 주소를 사용하는 개발 환경을 대상으로 합니다.
https://localhost
https://127.0.0.1
인증서에서 실제 접속 이름을 SAN에 명시하는 것이 중요합니다.
19. 생성된 파일 확인
인증서 생성이 완료되면 현재 폴더를 확인합니다.
Get-ChildItem
다음 두 파일을 확인합니다.
| 파일 | 설명 |
|---|---|
privkey.pem |
개인키(Private Key) |
Certificate.crt |
Self-Signed X.509 인증서 |
20. 파일이 실제로 생성됐는지 확인
PowerShell에서 다음 명령을 각각 실행합니다.
Test-Path .\privkey.pem
그리고:
Test-Path .\Certificate.crt
정상적으로 파일이 생성되었다면 각각 다음과 같이 출력됩니다.
True
21. 생성된 인증서 내용 확인
이제 생성된 인증서가 제대로 만들어졌는지 확인합니다.
openssl x509 -in Certificate.crt -text -noout
출력 결과에서 다음과 같은 정보를 확인할 수 있습니다.
- Subject
- Issuer
- Validity
- Public Key
- Signature Algorithm
- Subject Alternative Name
특히 다음과 같은 항목을 확인합니다.
Subject: CN=localhost
그리고 SAN 항목에서 다음 내용을 확인합니다.
X509v3 Subject Alternative Name:
DNS:localhost, IP Address:127.0.0.1
22. 인증서 유효기간 확인
다음 명령으로 인증서의 시작일과 만료일을 확인할 수 있습니다.
openssl x509 -in Certificate.crt -noout -dates
결과는 다음과 같은 형태입니다.
notBefore=...
notAfter=...
이번 인증서는 생성 명령에서 -days 365를 사용했기 때문에
생성 시점을 기준으로 365일의 유효기간을 갖습니다.
23. Self-Signed 인증서인지 확인
다음 명령을 실행합니다.
openssl x509 -in Certificate.crt -noout -subject -issuer
Self-Signed 인증서라면 일반적으로 Subject와 Issuer가 동일합니다.
예를 들면:
subject=CN=localhost
issuer=CN=localhost
즉 인증서를 발급한 주체와 인증서의 대상이 동일합니다.
24. PFX 파일 만들기
IIS와 같은 Windows 환경에서 인증서를 사용하려면 개인키와 인증서를 하나의 PFX(PKCS#12) 파일로 묶는 것이 편리합니다.
다음 명령을 실행합니다.
openssl pkcs12 -export -out PrivateKeyCert.pfx -inkey privkey.pem -in Certificate.crt
이 명령은 다음 파일을 이용합니다.
privkey.pem
Certificate.crt
그리고 최종적으로 다음 파일을 생성합니다.
PrivateKeyCert.pfx
25. PFX 비밀번호 설정
PFX 생성 명령을 실행하면 다음과 같이 비밀번호 입력을 요청합니다.
Enter Export Password:
Verifying - Enter Export Password:
원하는 PFX 비밀번호를 입력합니다.
비밀번호를 입력할 때 화면에 입력한 문자가 표시되지 않을 수 있습니다. 정상적인 동작이므로 비밀번호를 입력한 후 Enter를 누르면 됩니다.
실제 서버에서 사용할 PFX라면 쉽게 추측할 수 있는 비밀번호 대신 충분히 안전한 비밀번호를 사용하는 것이 좋습니다.
26. 최종 생성 파일 확인
다시 다음 명령을 실행합니다.
Get-ChildItem
최종적으로 다음과 같은 구조가 됩니다.
C:\Certificates
│
├── privkey.pem
├── Certificate.crt
└── PrivateKeyCert.pfx
| 파일 | 역할 |
|---|---|
privkey.pem |
개인키 |
Certificate.crt |
Self-Signed 인증서 |
PrivateKeyCert.pfx |
개인키 + 인증서를 포함하는 PKCS#12 파일 |
27. PFX 파일 정상 여부 확인
생성된 PFX 파일을 OpenSSL로 다시 확인합니다.
openssl pkcs12 -in PrivateKeyCert.pfx -info -noout
PFX 생성 시 지정했던 비밀번호를 입력합니다.
정상적으로 읽힌다면 PFX 파일이 정상적으로 생성된 것입니다.
28. 전체 작업 흐름
Windows 11
↓
OpenSSL 4.0.2 설치
↓
PATH 설정
↓
openssl version 확인
↓
Get-Command openssl 확인
↓
C:\Certificates 생성
↓
Self-Signed Certificate 생성
↓
privkey.pem
Certificate.crt
↓
PFX 생성
↓
PrivateKeyCert.pfx
↓
PFX 정상 여부 확인
↓
IIS 등에서 사용
29. 한 번에 다시 정리하기
처음부터 직접 따라 한다면 다음 순서대로 실행하면 됩니다.
① OpenSSL 버전 확인
openssl version
② 실제 OpenSSL 위치 확인
Get-Command openssl
③ 인증서 폴더 생성
mkdir C:\Certificates
cd C:\Certificates
④ Self-Signed 인증서 생성
openssl req -x509 -newkey rsa:2048 -noenc -sha256 -days 365 -keyout privkey.pem -out Certificate.crt -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
⑤ 생성 파일 확인
Get-ChildItem
⑥ 인증서 정보 확인
openssl x509 -in Certificate.crt -text -noout
⑦ PFX 생성
openssl pkcs12 -export -out PrivateKeyCert.pfx -inkey privkey.pem -in Certificate.crt
⑧ PFX 확인
openssl pkcs12 -in PrivateKeyCert.pfx -info -noout
30. 마무리
이번 글에서는 Windows 11에 OpenSSL 4.0.2를 설치하고, OpenSSL 명령줄을 이용하여 개발 환경에서 사용할 수 있는 Self-Signed Certificate를 생성해 보았습니다.
최종적으로 다음과 같은 세 개의 파일을 만들었습니다.
privkey.pem
Certificate.crt
PrivateKeyCert.pfx
각 파일의 역할은 다음과 같습니다.
privkey.pem→ 개인키Certificate.crt→ Self-Signed 인증서PrivateKeyCert.pfx→ 개인키와 인증서를 포함한 PFX 파일
특히 이번 예제에서는 localhost와 127.0.0.1을
Subject Alternative Name(SAN)에 지정했기 때문에
로컬 개발 환경에서 HTTPS를 테스트할 때 활용할 수 있습니다.
Self-Signed 인증서 생성:
openssl req -x509 -newkey rsa:2048 -noenc -sha256 -days 365 -keyout privkey.pem -out Certificate.crt -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,IP:127.0.0.1"
PFX 생성:
openssl pkcs12 -export -out PrivateKeyCert.pfx -inkey privkey.pem -in Certificate.crt
```
대화 참여하기