Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 18.11. 서비스를 위한 인증서 설치 [링크 복사], [링크+제목 복사],
조회: 31133
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기
(연관된 글이 7개 있습니다.)

8. 서비스를 위한 인증서 설치


사실, 서비스를 위한 인증서를 받는 것은 IIS 6/IIS 7의 인증서 요청 마법사를 이용하는 것과 다른 것이 없습니다. 그렇죠? IIS 6/IIS 7 역시 하나의 NT 서비스이기 때문입니다. 즉, 아래와 같은 토픽 2개는 달리 말하면 서비스를 위한 인증서를 받아서 설치하는 것이라고 볼 수 있습니다.

웹 사이트에 SSL을 적용
; https://www.sysnet.pe.kr/2/0/372

IIS 7 - SSL 사이트 설정하는 방법
; https://www.sysnet.pe.kr/2/0/428

하지만, 직접 인증 기관에 요청을 전달하고 받는 과정을 해봄으로써 좀 더 인증서 관리에 대한 이해를 높일 수 있기 때문에 여기서는 "개발 환경 구성: 18.4. 사용자 인증서 발급"에서 설명한 것처럼 서버 인증서도 마법사를 이용하지 않고 직접 받아보는 과정을 설명해 보겠습니다.

또한 여기서는, 새로운 플랫폼에 적응하는 의미에서 서버는 "롱혼 서버"로 하고, 클라이언트는 "윈도우 비스타"로 했습니다. 구체적인 환경 설정은 다음과 같습니다.

환경 설정 가정:
  운영체제 : 롱혼 서버 (빌드 5600)
  인증서 서비스 : 롱혼 서버에서 제공되는 기본 "Certification Authority"
  인증서 서비스가 설치된 컴퓨터 DNS: www.sysnet.pe.kr
  SSL 인증서를 적용할 웹 사이트의 컴퓨터 이름 : sedona

참고로, 롱혼 서버에서의 인증 기관 서비스 설치는 다음의 토픽을 참고하십시오.

Vista와 웹 인증 등록 서비스의 문제 
; https://www.sysnet.pe.kr/2/0/403




[단계 1: 서버 인증서 요청]

1. "https://[실습 롱혼 서버]/certsrv" 사이트를 방문합니다. 그럼 아래와 같은 화면이 나오게 됩니다. 여기에서 "Request a certificate" 메뉴를 선택합니다.

server_cert_req_1.png

2. 아래와 같이 인증서 종류를 선택하는 화면에서 "advanced certificate request"를 선택합니다.

server_cert_req_2.png

3. 준비된 certreq.txt와 같은 파일이 없기 때문에, "Create and submit a request to this CA" 링크를 선택합니다.

server_cert_req_3.png

4. 아래와 같은 인증서 요청 설정에서, 여기서는 3가지 값을 변경시키도록 하겠습니다.

  Name : sedona (SSL 인증서가 적용될 웹 사이트의 접근 주소)
  Type of Certificate Needed : Server Authentication Certificate
  Key Options: Mark keys as exportable (설정)

server_cert_req_4.png

"Submit" 버튼을 누르면 다음과 같은 질문을 받게 됩니다.

"
This Web site is requesting a new certificate on your behalf.
You should allow only trusted Web sites to request a certificate for you.
-
Do you want to request a certificate now?
"

"Yes" 버튼을 누릅니다.

참고로, 이 부분에서 롱혼 서버의 웹 인증 요청 서비스에 대해 기존 Windows 2003에서 제공되던 것과 다른 점이 몇가지 있습니다. 그중에서도 눈에 띄는 것이 "Store certificate in the local computer certificate store"라는 옵션이 제거되어 있다는 것인데요. 이로 인해서 서버 인증서의 경우에 나중에 다소 복잡한 절차를 거쳐서 해당 인증서를 "Local Computer" 영역으로 이동시켜 줘야 합니다. 이것은 "[단계 4]"에서 좀 더 자세히 알아보겠습니다.

5. 잠깐의 시간이 흐른 다음 아래 화면과 같은 응답을 받을 수 있습니다. 중요한 것은 요청 ID 값이 "77"번이라는 것입니다.

server_cert_req_5.png




[단계 2: 요청된 인증서 발급]

위와 같은 과정을 거쳐서 SSL 인증서에 대한 요청을 보낼 수 있습니다. 이렇게 요청은 보냈지만, 승인할 수 있는 것은 "관리자"의 몫입니다. "18.2. 웹 사이트에 SSL을 적용"을 읽어 보신 분들은 그 방법을 아실 텐데요. 생각이 안 나시는 분들은 다음을 읽어보시면 됩니다.

인증서 서비스에서 해당 "요청"을 승인
; https://www.sysnet.pe.kr/2/0/372#process_a_request




[단계 3: 발급된 SSL 인증서 다운로드]

1. "https://[실습 롱혼 서버]/certsrv" 사이트를 방문합니다. 이번에는 "View the status of a pending certificate request" 메뉴를 선택합니다.

2. 그럼, 아래와 같이 요청에 대한 처리 결과 목록을 보여줍니다. 해당 링크를 선택합니다.

server_cert_req_6.png

3. 관리자가 여러분들의 요청을 수락한 경우에만 아래와 같은 화면이 보이게 됩니다.

server_cert_req_7.png

"Install this certificate" 링크를 누르면 다음과 같이 묻는 창이 뜨게 됩니다.

This Web site is adding one or more certificates to this computer.
Allowing an untrusted Web site to update your certificates is a security risk.
The Web site could install certificates you do not trust, which could allow programs
that you do not trust to run on this computer and gain access to your data.

Do you want this program to add the certificates now?
Click Yes if you trust this Web site. Otherwise, click No.

"Yes"를 선택합니다.




[단계 4: 설치된 SSL 인증서를 서비스(예를 들어, IIS)에서 사용할 수 있도록 설정]

여기서부터의 이야기는, 여러분들이 기본적으로 다음의 토픽을 읽었다고 가정합니다. (그리고, 실제로 아래의 토픽에서 설명한 대로 인증서를 보기 위한 MMC 관리자 구성을 하시길 바랍니다.)

인증서 관리 - 인증서 MMC 관리자
; https://www.sysnet.pe.kr/2/0/395

자, 그럼 이야기를 다시 진행해 볼까요? ^^ 위에서 여러분들은 SSL 인증서를 성공적으로 발급 받아서 설치할 수가 있었을 것입니다. 하지만, 여기서 문제가 있지요. "인증서 관리 - 인증서 MMC 관리자"의 내용을 정독하신 분이라면 쉽게 그 문제를 파악하실 수 있을 텐데요.

바로, 여러분들이 위에서 설치한 SSL 인증서가 "Certificates - CurrentUser" 영역에 등록되어 있다는 사실입니다.

server_cert_req_8.png

"인증서 관리 - 인증서 MMC 관리자"에서 설명드린 대로, "Certificates - CurrentUser"에 등록되어 있다면 일반적인 웹 애플리케이션의 구동 계정인 ASPNET, SYSTEM 등의 계정으로는 해당 인증서를 접근할 수 없기 때문에 당연히 서비스 기능이 정상적으로 동작하지 않게 됩니다.

따라서, 여러분들은 (여기서는 예제로 든) "sedona" 인증서를 "Certificates (Local Computer)"의 Personal 영역에 이동(또는 복사)해야 합니다. 그런데, 이 과정에서 MMC 관리자를 통해서 단순히 해당 인증서를 Local Computer 영역으로 Drag & Drop 하는 식으로 해서는 안됩니다. 왜냐하면, 이미 인증서가 "[단계 3]"의 3번째 과정에서 설치한 순간부터 현재 로그인한 사용자(CurrentUser)의 전용 폴더에 위치하고 있기 때문입니다. 이로 인해, 다소 불편하지만 "Current User\Personal\Certificates"에 있는 인증서를 오른쪽 버튼으로 눌러서 나오는 메뉴의 내보내기(Export) 메뉴를 선택해서 해당 인증서를 pfx 파일로 저장시킨 후, 그것을 다시 "Local Computer\Personal\Certificates" 영역에서 가져오기(import)를 해야 합니다. (이것 때문에, "[단계 1]"에서 "Mark keys as exportable" 옵션을 설정한 것입니다.)




[단계 5: 인증서 설치 확인]

자, 그럼 정상적으로 인증서가 설치되었는지 한번 확인해 볼까요? ^^ 우선, 여러분들의 인증서는 다음과 같이 "Local Computer\Personal\Certificates" 영역에 위치해 있어야 합니다.

server_cert_req_9.png

그리고, 실제로 해당 인증서 파일이 서비스 계정에서 접근할 수 있는 영역에 있는지 확인해 봐야 합니다. 이를 위해서는 "findprivatekey.exe"라는 실행파일이 필요합니다. 이 파일은 다음의 사이트에서 구할 수 있습니다.

Introduction to Information Cards and Internet Explorer 7.0 (in C#)
; http://cardspace.netfx3.com/files/folders/samples_rc_1/entry6000.aspx

위의 사이트에서 "Introduction to CardSpace with Internet Explorer 7.0.zip" 파일을 다운로드한 후 압축을 해제하면 "bin" 폴더에 "findprivatekey.exe" 파일이 있습니다.

자, 이제 다음과 같이 명령어 창에서 실행해 봅니다.

D:\tempWinFX\Cardspace\bin>findprivatekey.exe MY LocalMachine -n "CN=sedona"

Private key directory:
C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
Private key file name:
7a171f28ae265f27801c5ca46b856140_668a234e-63ee-4437-be2a-214db24f6cb5

"CN=sedona" 값은 여러분들의 인증서 CN 값을 주어야 합니다. 위의 출력에서 꼭 확인해 봐야 할 값은 "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys"입니다. 만약 이 경로가 사용자 계정과 연관된 경로라면 인증서를 잘못 설치하신 것입니다.



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 3/6/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
12237정성태6/20/202017765.NET Framework: 912. 리눅스 환경의 .NET Core에서 "test".IndexOf("\0")가 0을 반환
12236정성태6/19/202018504오류 유형: 621. .NET Standard 대상으로 빌드 시 dynamic 예약어에서 컴파일 오류 - error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.CSharpArgumentInfo.Create'
12235정성태6/19/202017622오류 유형: 620. Windows 10 - Inaccessible boot device 블루 스크린
12234정성태6/19/202017010개발 환경 구성: 494. NuGet - nuspec의 패키지 스키마 버전(네임스페이스) 업데이트 방법
12233정성태6/19/202017592오류 유형: 619. SQL 서버 - The transaction log for database '...' is full due to 'LOG_BACKUP'. - 두 번째 이야기
12232정성태6/19/202016227오류 유형: 618. SharePoint - StoreBusyRetryLater 오류
12231정성태6/15/202019512.NET Framework: 911. Console/Service Application을 위한 SynchronizationContext - AsyncContext
12230정성태6/15/202018359오류 유형: 617. IMetaDataImport::GetMethodProps가 반환하는 IL 코드 주소(RVA) 문제
12229정성태6/13/202020263.NET Framework: 910. USB/IP PROJECT를 이용해 C#으로 USB Keyboard + Mouse 가상 장치 만들기 [1]
12228정성태6/12/202019595.NET Framework: 909. C# - Source Generator를 적용한 XmlCodeGenerator파일 다운로드1
12227정성태6/12/202023528오류 유형: 616. Visual Studio의 느린 업데이트 속도에 대한 원인 분석 [5]
12226정성태6/11/202021605개발 환경 구성: 493. OpenVPN의 네트워크 구성 [4]파일 다운로드1
12225정성태6/11/202019536개발 환경 구성: 492. 윈도우에 OpenVPN 설치 - 클라이언트 측 구성
12224정성태6/11/202028246개발 환경 구성: 491. 윈도우에 OpenVPN 설치 - 서버 측 구성 [1]
12223정성태6/9/202023959.NET Framework: 908. C# - Source Generator 소개 [10]파일 다운로드2
12222정성태6/3/202017434VS.NET IDE: 146. error information: "CryptQueryObject" (-2147024893/0x80070003)
12221정성태6/3/202017203Windows: 170. 비어 있지 않은 디렉터리로 symbolic link(junction) 연결하는 방법
12220정성태6/3/202020959.NET Framework: 907. C# DLL로부터 TLB 및 C/C++ 헤더 파일(TLH)을 생성하는 방법
12219정성태6/1/202019808.NET Framework: 906. C# - lock (this), lock (typeof(...))를 사용하면 안 되는 이유파일 다운로드1
12218정성태5/27/202019158.NET Framework: 905. C# - DirectX 게임 클라이언트 실행 중 키보드 입력을 감지하는 방법 [3]
12217정성태5/24/202017242오류 유형: 615. Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.
12216정성태5/15/202020789.NET Framework: 904. USB/IP PROJECT를 이용해 C#으로 USB Keyboard 가상 장치 만들기 [14]파일 다운로드1
12215정성태5/12/202026750개발 환경 구성: 490. C# - (Wireshark의) USBPcap을 이용한 USB 패킷 모니터링 [10]파일 다운로드1
12214정성태5/5/202018435개발 환경 구성: 489. 정식 인증서가 있는 경우 Device Driver 서명하는 방법 (2) - UEFI/SecureBoot [1]
12213정성태5/3/202019564개발 환경 구성: 488. (User-mode 코드로 가상 USB 장치를 만들 수 있는) USB/IP PROJECT 소개
12212정성태5/1/202016772개발 환경 구성: 487. UEFI / Secure Boot 상태인지 확인하는 방법
... 61  62  63  64  65  66  67  [68]  69  70  71  72  73  74  75  ...