Windows 10에서 OpenSSL: 포괄적인 PowerShell 가이드

SSL 인증서를 생성하는 것은 겁을 먹게 만들 수 있는 작업이며, 좌절과 슬픔으로 가득한 작업입니다. 하지만 그렇게 될 필요는 없습니다! Windows 10과 OpenSSL이 있으며 이 튜토리얼의 도움을 받으면 길을 잘 찾을 수 있습니다.

이 문서에서는 Windows 10에 OpenSSL을 설치하는 방법을 배우고, 설치 후 SSL 인증서를 생성하고, 인증서를 문제 해결 및 디버그하며, 형식 간 변환하는 방법을 배우게 됩니다.

자, Windows 10에서 PowerShell로 OpenSSL을 마스터해 봅시다!

관련 정보: Windows 인증서 관리자 및 PowerShell로 인증서 관리하기

사전 조건

이 문서에서는 실습 중심으로 학습하게 됩니다. OpenSSL은 주로 Linux 운영체제에서 사용되는 유틸리티이지만 Windows 운영체제에서도 사용할 수 있습니다.

이 가이드의 모든 스크린샷은 Windows 10 빌드 1909와 PowerShell 7에서 촬영되었습니다.

PowerShell과 Chocolatey를 사용하여 Windows 10에 OpenSSL 설치하기

Chocolatey를 설치했다고 가정하고, 첫 번째 작업은 Windows 10에 OpenSSL을 설치하는 것입니다. 이를 위해 PowerShell 콘솔을 열고 아래와 같이 choco install OpenSSL.Light 명령을 실행하십시오.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

그것으로 OpenSSL을 PowerShell에 설치했습니다.

작업 디렉토리 설정

이 튜토리얼에서는 몇 개의 인증서를 생성하여 학습할 것입니다. 여기에서 수행하는 모든 작업이 나중에 정리할 수 있는 단일 폴더에 제한되도록 하기 위해 폴더를 먼저 생성하십시오.

이 튜토리얼에서는 모든 인증서 및 관련 파일을 C:\certs 폴더에 저장합니다. PowerShell에서 아래 명령을 실행하여 폴더를 생성할 수 있습니다.

New-Item -ItemType Directory -Path C:\certs

이제 OpenSSL을 구성해야 합니다.

OpenSSL 구성

기본적으로 Windows 10의 OpenSSL에는 구성 파일이 포함되어 있지 않습니다. 이것은 사용자가 보안 요구에 가장 잘 맞게 나중에 사용자 정의할 수 있는 많은 구성 옵션이 있기 때문에 의도된 것입니다.이 가이드의 목적을 위해 보안 요구에 가장 잘 맞도록 나중에 사용자 정의할 수 있는 샘플 구성을 사용할 것입니다.

PowerShell을 열고 아래 명령을 실행하십시오. 이 명령은 MIT에서 샘플 구성 파일을 다운로드하고 현재 작업 디렉토리에 openssl.cnf로 저장합니다.

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

이제 openssl.cnf 파일을 열면 아래와 같은 내용이 표시됩니다.

Sample OpenSSL configuration file

다운로드 된 구성은 현재 그대로 작동합니다. 제품 환경에서 기본값을 사용하지 마십시오!

PowerShell 프로필 환경 변수 업데이트

작업을 원활하게 하기 위해 Windows 10에서 PowerShell 프로필을 수정해야 합니다. 일부 환경 변수를 설정하면 설치한 OpenSSL의 다른 버전 간에 쉽게 전환할 수 있습니다.

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

아래에서 이미 프로필이 없다면 PowerShell 프로필을 만드는 방법을 확인할 수 있습니다. 이 명령은 OpenSSL 이진 파일 경로를 PATH에 추가하고 구성 파일 경로를 OPENSSL_CONF에 할당합니다.

# PowerShell 프로필에 환경 변수 추가
# 프로필 확인, 없으면 생성!
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# 이러한 줄 추가하려면 프로필 수정
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

환경 변수를 사용하려면 프로필을 다시로드하려면 . $profile을 입력하거나 PowerShell을 닫고 다시 엽니다.

이제 PowerShell에서 아래에 표시된대로 어디에서나 openssl 이진 파일을 쉽게 호출할 수 있습니다.

Verifying OpenSSL version in PowerShell

Windows 10에서 OpenSSL을 사용하여 CSR 및 개인 키 생성

SSL 인증서를 생성하기 전에 인증서 서명 요청(CSR)을 생성해야합니다. CSR은 공개 키를 인증 기관(CA)과 공유하는 방법을 제공하는 인코딩된 파일입니다. 이 파일에는 식별 정보, 서명 알고리즘 및 디지털 서명이 포함되어 있습니다. 첫 번째 CSR과 개인 키를 생성해 봅시다.

관련: 초보자를 위한 X509 인증서 안내서

CSR을 생성하려면 아래 명령을 실행하십시오. OpenSSL에서 식별 정보를 입력하도록 요청할 것입니다. 다음 데모에서 확인할 수 있습니다.

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

완료하면 유효한 CSR과 개인 키가 생성되며 이를 사용하여 SSL 인증서를 발급할 수 있습니다.

데이터를 매번 입력하지 않고도 이 프로세스를 간소화하기 위해 구성 파일의 기본값을 수정할 수도 있습니다.

사용 가능한 CSR 옵션에 대해 더 알아보고 매뉴얼 페이지에서 구성 예제를 확인할 수 있습니다. OpenSSL은 예제를 포함한 활발한 GitHub 저장소도 가지고 있습니다.

RSA 키 쌍 생성

OpenSSL을 사용하여 RSA 키 쌍(공개/개인)을 생성할 수도 있습니다. 아래와 같이 genrsa 하위 명령을 사용하여 먼저 개인 키를 생성하십시오.

다음 명령을 실행하면 Windows 10의 OpenSSL이 키 길이가 2048 비트인 RSA 개인 키를 생성합니다. 이 키는 현대적인 하드웨어에서 거의 즉시 생성됩니다. 생성된 키는 작업 디렉토리에 출력됩니다.

# 최대 키 크기 2048을 사용하여 개인 키 생성
# 키 크기는 512, 758, 1024, 1536 또는 2048일 수 있습니다.
openssl genrsa -out rsa.private 2048

다음으로 방금 생성한 개인 키를 사용하여 공개 키를 생성합니다. 아래 구문은 작업 디렉토리에 rsa.public이라는 공개 키를 rsa.private 개인 키에서 생성합니다.

# 개인 키를 사용하여 공개 키 생성
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

자체 서명 인증서 생성

가끔은 자체 서명 인증서를 생성해야 할 수도 있습니다. 자체 서명 인증서는 실험용으로 사용하기에는 좋지만 제품 환경에서 사용하기에는 안전하지 않은 방법입니다.

다음 작업으로 넘어가기 전에 자체 서명 인증서를 생성해 봅시다. 아래 명령을 입력하여 X509 SSL 인증서를 생성합니다. 이 인증서는 RSA 키 길이가 2048 비트이며 유효 기간이 365일인 SHA256 암호화를 사용합니다. 인증서는 작업 디렉토리에 저장됩니다.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

이제 브라우저나 서버에 인증서를 가져오 ready합니다.

OpenSSL을 사용하여 CSR, 인증서 및 키 유효성 검사

CSR, 개인 키, 인증서 또는 PKCS#12의 정보를 확인하면 SSL 오류를 해결하는 데 시간을 절약할 수 있습니다. 때로는 잘못된 키가 인증서 생성에 사용된 경우가 있습니다. 예를 들어, 인증서에 잘못된 식별 정보가 포함될 수 있습니다.

이제 몇 가지 매개변수와 함께 req 명령을 사용하여 CSR을 확인하는 것으로 시작해 보겠습니다:

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

국가 이름, 조직 이름, 이 가이드의 시작 부분에서 CSR을 생성할 때 입력한 이메일 주소 등과 같은 세부 정보는 정확히 일치해야 합니다.

또한 몇 가지 매개변수와 함께 x509 하위 명령을 사용하여 인증서를 확인할 수도 있습니다:

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

OpenSSL을 사용하여 인증서 변환하기

일부 응용 프로그램에서는 특정한 인증서 형식을 사용하지 않을 수도 있습니다. 예를 들어, HAproxy라는 응용 프로그램에서는 PEM 인증서를 요구하는데, 여기서는 DER 형식의 인증서(.crt .cer .der)를 가지고 있을 수 있습니다.

인증서 변환을 보여주기 위해, 이전에 생성된 자체 서명 인증서를 DER 형식(certificate.crt)에서 PEM 형식으로 변환해 보겠습니다. 다음 코드 스니펫의 코드를 사용하세요.

아래 명령은 x509 하위 명령을 사용하며, -inform 매개변수는 -in 파일의 형식과 일치해야 하며, 이에 이어 -out 형식을 지정합니다.

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

또한 아래와 같이 PEM에서 DER 형식으로 역순으로 변환할 수도 있습니다.

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

그리고 마지막으로, PKCS#12를 PEM으로 변환하거나 PEM을 PKCS#12로 변환할 수 있습니다. 이는 개인 키와 인증서를 포함하는 파일 유형입니다. PEM 형식으로 변환하려면 pkcs12 하위 명령을 사용하십시오.

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

또한 몇 가지 추가 옵션을 사용하여 PEM 인증서와 개인 키를 PKCS#12 형식으로 변환할 수도 있습니다. 아래 예제에서는 입력 소스로 SomeCertificate.crt를 사용하여 개인 키를 사용하여 PKCS#12 형식으로 인증서를 내보내고 있습니다. -certfile 옵션 값 MyCACert.crt를 사용하여 SomeCertificate.crt를 유효성 검사할 수 있습니다.

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

문제 해결 및 디버깅

이제 CSR, 인증서 및 키 쌍을 생성하고 변환할 수 있으므로 문제를 해결하고 디버깅하는 방법을 배워보겠습니다. OpenSSL에는 문제를 해결하는 데 도움이 되는 명령이 포함되어 있습니다.

OpenSSL은 또한 파일 무결성을 확인하고 가능한 데이터 손상을 테스트하는 것도 가능합니다. MD5 체크섬을 사용하여 인증서, 키 및 CSR을 테스트하는 다음 코드 예제를 사용할 수 있습니다:

# 인증서
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# 공개 / 개인 키
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# 인증서 서버 요청
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# 외부 SSL 연결 확인
openssl s_client -connect www.google.com:443

원래 해시를 얻은 후 현재 해시와 비교하여 인증서가 수정되거나 손상되지 않았는지 확인할 수 있습니다.

다음은 PowerShell에서 실행할 때 해당 코드가 어떻게 보이는지 샘플입니다:

Sample troubleshooting command output with OpenSSL in PowerShell

요약

이 문서에서는 Windows 10에서 OpenSSL을 설치하고 구성하는 방법, CSR, 키 쌍 및 SSL 인증서를 생성하는 방법에 대해 배웠습니다. 또한 다른 인증서 형식 간의 변환 및 내장 하위 명령을 사용하여 기본적인 문제 해결을 수행하는 방법에 대해 배웠습니다.

추가 자료

Source:
https://adamtheautomator.com/openssl-windows-10/