[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 파일까지 만드는 과정을 정리합니다.

이번 글에서 진행할 작업
  1. Windows 11에 OpenSSL 4.0.2 설치
  2. OpenSSL PATH 환경 변수 설정
  3. OpenSSL 정상 설치 여부 확인
  4. Self-Signed 인증서 생성
  5. 개인키와 인증서 확인
  6. PFX 파일 생성
  7. 생성된 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

OpenSSL 4.0.x와 LTS에 대한 참고

현재 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:localhost
  • IP: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 파일

특히 이번 예제에서는 localhost127.0.0.1Subject 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
```

참고 자료

NextGen Digital... Welcome to WhatsApp chat
Howdy! How can we help you today?
Type here...