개요
Windows Server 및 Windows에서 Active Directory CA 또는 제 3자 인증 기관에서 배포한 개인용 인증서를 다른 서버 및 응용 프로그램에서 사용하기 위해서는 인증서를 내보내야 합니다. 이 글에서는 Windows에서 MMC를 이용하여 개인용 인증서를 내보내는 방법을 설명하겠습니다.
MMC 열어서 Certificates Snap-in 추가하기
Windows + R 또는 하단 검색창에서 실행 (Run)을 열어 mmc를 입력하여 Microsoft Management Console 창을 엽니다.
상단 매뉴의 File > Add/Remove Snap-in 항목을 클릭합니다.
좌측의 Avaliable snap-ins 항목에서 Certificates 선택 후 중앙의 Add 버튼을 눌러 Snap-in을 추가합니다.
현재 내보내려는 인증서의 위치를 선택합니다.
OK를 눌러 창을 닫습니다.
좌측 트리 매뉴에서 Certificates > Personal > Certificates 매뉴로 이동합니다.
.PFX (PKCS #12) 형식으로 내보내기
.PFX (PKCS #12)는 한 파일에 개인 키 및 인증서가 함께 포함되어 있는 파일이므로, 한 개의 파일로 모든 정보를 한번에 전송 할 수 있습니다.
내보내려는 인증서를 우클릭하여 All Tasks > Export 항목을 클릭합니다.
Next 버튼을 클릭하여 Certificate Export Wizard를 실행합니다.
Yes, export the private key 항목에 체크하여 개인 키를 함께 내보냅니다.
Include all certificates in the certification path if possible 및 Enable certificate privacy 항목에 체크합니다.
인증서를 설치 할 때 사용할 암호를 지정합니다. 이 암호는 나중에 인증서를 설치할 때에 필요함으로 잊어버리면 안됩니다.
내보낼 파일의 경로와 이름을 지정합니다.
Finish 항목을 눌러 마법사를 완료합니다.
지정 한 경로에 성공적으로 인증서를 내보냈습니다.
.crt / .key (PKCS #7) 형식으로 내보내기
.crt / .cer (PKCS #7) 형식은 인증서가 개인 키가 각 각 다른 파일에 저장되는 형식으로, 대부분의 서버에서 범용적으로 사용됩니다.
Windows에서는 인증서를 개인 키와 함께 내보내려면, PKCS #12 형식으로만 내보낼 수 있기 때문에 .pfx 파일을 PKCS #7 형식으로 OpenSSL을 이용해 변환해야 합니다.
먼저 위의 방법대로 PKCS #12 형식으로 인증서를 내보낸 후, 아래에서 OpenSSL Windows용 바이너리를 다운 받아 설치하고 인증서가 있는 위치에서 명령 프롬프트 또는 Windows PowerShell을 엽니다.
이 파일은 Windows용 OpenSSL 라이브러리(http://slproweb.com/products/Win32OpenSSL.html) 설치 파일입니다.
cmd 창에서 openssl을 입력하였을때 명령 도움말이 표시되면 제대로 바이너리를 설치한 것 입니다.
PowerShell에서는 코드 보안정책에 따라 명령어 앞에 ./을 붙여야 할 수 있습니다.
아래 명령어로 PKCS #12 파일에서 .crt / .cer 형식으로 인증서를 추출합니다.
openssl pkcs12 -in [pfx 파일 이름] -clcerts -nokeys -out [내보낼 인증서 파일 이름]
인증서 비밀번호를 입력할 때에 명령 프롬프트 창에는 아무 것도 입력되지 않는 것으로 보이나, 이는 보안상 이유로 입력이 가려진 것으로 실제 입력은 정상적으로 이루어집니다.
아래 명령어로 PKCS#12 파일에서 .key 형식으로 개인 키를 추출합니다.
openssl pkcs12 -in [pfx 파일 이름] -nocerts -nodes -out [내보낼 개인 키 파일 이름]
호환성 문제를 방지하기 위하여 OpenSSL로 PKCS#12 파일에서 인증서와 개인 키를 분리한 경우에 Bag Attributes가 포함 된 경우에는 반드시 문서 편집기로 개인 키 및 인증서 파일을 열어 Bag Attributes 항목을 제거하세요.
암호화 된 개인 키 복호화하기
위 방법대로 개인 키를 추출한 경우에는 개인 키의 암호화를 해제하여 추출하지만, 다른 명령어를 사용하여 개인 키를 추출한 경우에는 개인 키가 암호화되어 있을 수 있습니다.
이와 같은 경우 개인 키의 암호화를 해제하여야 대부분의 서버 및 응용 프로그램에서 정상적으로 개인 키를 해석 할 수 있습니다.
암호화 된 개인 키의 경우, 'BEGIN ENCRYPTED PRIVATE KEY' 또는 'BEGIN RSA PRIVATE KEY'로 해더 자체가 일반 개인 키와 다릅니다.
OpenSSL 바이너리를 통해 아래의 명령을 실행합니다.
openssl rsa -in [암호화 된 개인 키 이름] -out [내보낼 개인 키 이름]
성공적으로 PKCS#12 형식 파일에서 인증서와 개인 키를 추출하였습니다.