Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 18.11. 서비스를 위한 인증서 설치 [링크 복사], [링크+제목 복사],
조회: 30841
글쓴 사람
정성태 (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

비밀번호

댓글 작성자
 




1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13793정성태10/28/20245134C/C++: 183. C++ - 윈도우에서 한글(및 유니코드)을 포함한 콘솔 프로그램을 컴파일 및 실행하는 방법
13792정성태10/27/20244620Linux: 99. Linux - 프로세스의 실행 파일 경로 확인
13791정성태10/27/20244885Windows: 267. Win32 API의 A(ANSI) 버전은 DBCS를 사용할까요?파일 다운로드1
13790정성태10/27/20244606Linux: 98. Ubuntu 22.04 - 리눅스 커널 빌드 및 업그레이드
13789정성태10/27/20244895Linux: 97. menuconfig에 CONFIG_DEBUG_INFO_BTF, CONFIG_DEBUG_INFO_BTF_MODULES 옵션이 없는 경우
13788정성태10/26/20244443Linux: 96. eBPF (bpf2go) - fentry, fexit를 이용한 트레이스
13787정성태10/26/20244946개발 환경 구성: 730. github - Linux 커널 repo를 윈도우 환경에서 git clone하는 방법 [1]
13786정성태10/26/20245203Windows: 266. Windows - 대소문자 구분이 가능한 파일 시스템
13785정성태10/23/20244969C/C++: 182. 윈도우가 운영하는 2개의 Code Page파일 다운로드1
13784정성태10/23/20245235Linux: 95. eBPF - kprobe를 이용한 트레이스
13783정성태10/23/20244845Linux: 94. eBPF - vmlinux.h 헤더 포함하는 방법 (bpf2go에서 사용)
13782정성태10/23/20244605Linux: 93. Ubuntu 22.04 - 커널 이미지로부터 커널 함수 역어셈블
13781정성태10/22/20244785오류 유형: 930. WSL + eBPF: modprobe: FATAL: Module kheaders not found in directory
13780정성태10/22/20245543Linux: 92. WSL 2 - 커널 이미지로부터 커널 함수 역어셈블
13779정성태10/22/20244829개발 환경 구성: 729. WSL 2 - Mariner VM 커널 이미지 업데이트 방법
13778정성태10/21/20245650C/C++: 181. C/C++ - 소스코드 파일의 인코딩, 바이너리 모듈 상태의 인코딩
13777정성태10/20/20244937Windows: 265. Win32 API의 W(유니코드) 버전은 UCS-2일까요? UTF-16 인코딩일까요?
13776정성태10/19/20245249C/C++: 180. C++ - 고수준 FILE I/O 함수에서의 Unicode stream 모드(_O_WTEXT, _O_U16TEXT, _O_U8TEXT)파일 다운로드1
13775정성태10/19/20245477개발 환경 구성: 728. 윈도우 환경의 개발자를 위한 UTF-8 환경 설정
13774정성태10/18/20245181Linux: 91. Container 환경에서 출력하는 eBPF bpf_get_current_pid_tgid의 pid가 존재하지 않는 이유
13773정성태10/18/20244869Linux: 90. pid 네임스페이스 구성으로 본 WSL 2 + docker-desktop
13772정성태10/17/20245143Linux: 89. pid 네임스페이스 구성으로 본 WSL 2 배포본의 계층 관계
13771정성태10/17/20245049Linux: 88. WSL 2 리눅스 배포본 내에서의 pid 네임스페이스 구성
13770정성태10/17/20245326Linux: 87. ps + grep 조합에서 grep 명령어를 사용한 프로세스를 출력에서 제거하는 방법
13769정성태10/15/20246101Linux: 86. Golang + bpf2go를 사용한 eBPF 기본 예제파일 다운로드1
13768정성태10/15/20245378C/C++: 179. C++ - _O_WTEXT, _O_U16TEXT, _O_U8TEXT의 Unicode stream 모드파일 다운로드2
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...