Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 18.11. 서비스를 위한 인증서 설치 [링크 복사], [링크+제목 복사],
조회: 25908
글쓴 사람
정성태 (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)
13514정성태1/5/20242303개발 환경 구성: 702. IIS - AppPool의 "Disable Overlapped Recycle" 옵션
13513정성태1/5/20242222닷넷: 2194. C# - WebActivatorEx / System.Web의 PreApplicationStartMethod 특성
13512정성태1/4/20242174개발 환경 구성: 701. IIS - w3wp.exe 프로세스의 ASP.NET 런타임을 항상 Warmup 모드로 유지하는 preload Enabled 설정
13511정성태1/4/20242195닷넷: 2193. C# - ASP.NET Web Application + OpenAPI(Swashbuckle) 스펙 제공
13510정성태1/3/20242120닷넷: 2192. C# - 특정 실행 파일이 있는지 확인하는 방법 (Linux)
13509정성태1/3/20242168오류 유형: 887. .NET Core 2 이하의 프로젝트에서 System.Runtime.CompilerServices.Unsafe doesn't support netcoreapp2.0.
13508정성태1/3/20242217오류 유형: 886. ORA-28000: the account is locked
13507정성태1/2/20242862닷넷: 2191. C# - IPGlobalProperties를 이용해 netstat처럼 사용 중인 Socket 목록 구하는 방법파일 다운로드1
13506정성태12/29/20232454닷넷: 2190. C# - 닷넷 코어/5+에서 달라지는 System.Text.Encoding 지원
13505정성태12/27/20232982닷넷: 2189. C# - WebSocket 클라이언트를 닷넷으로 구현하는 예제 (System.Net.WebSockets)파일 다운로드1
13504정성태12/27/20232568닷넷: 2188. C# - ASP.NET Core SignalR로 구현하는 채팅 서비스 예제파일 다운로드1
13503정성태12/27/20232437Linux: 67. WSL 환경 + mlocate(locate) 도구의 /mnt 디렉터리 검색 문제
13502정성태12/26/20232552닷넷: 2187. C# - 다른 프로세스의 환경변수 읽는 예제파일 다운로드1
13501정성태12/25/20232321개발 환경 구성: 700. WSL + uwsgi - IPv6로 바인딩하는 방법
13500정성태12/24/20232412디버깅 기술: 194. Windbg - x64 가상 주소를 물리 주소로 변환
13498정성태12/23/20233099닷넷: 2186. 한국투자증권 KIS Developers OpenAPI의 C# 래퍼 버전 - eFriendOpenAPI NuGet 패키지
13497정성태12/22/20232494오류 유형: 885. Visual Studiio - error : Could not connect to the remote system. Please verify your connection settings, and that your machine is on the network and reachable.
13496정성태12/21/20232483Linux: 66. 리눅스 - 실행 중인 프로세스 내부의 환경변수 설정을 구하는 방법 (gdb)
13495정성태12/20/20232413Linux: 65. clang++로 공유 라이브러리의 -static 옵션 빌드가 가능할까요?
13494정성태12/20/20232581Linux: 64. Linux 응용 프로그램의 (C++) so 의존성 줄이기(ReleaseMinDependency) - 두 번째 이야기
13493정성태12/19/20232703닷넷: 2185. C# - object를 QueryString으로 직렬화하는 방법
13492정성태12/19/20232378개발 환경 구성: 699. WSL에 nopCommerce 예제 구성
13491정성태12/19/20232267Linux: 63. 리눅스 - 다중 그룹 또는 사용자를 리소스에 권한 부여
13490정성태12/19/20232399개발 환경 구성: 698. Golang - GLIBC 의존을 없애는 정적 빌드 방법
13489정성태12/19/20232177개발 환경 구성: 697. GoLand에서 ldflags 지정 방법
13488정성태12/18/20232112오류 유형: 884. HTTP 500.0 - 명령행에서 실행한 ASP.NET Core 응용 프로그램을 실행하는 방법
1  2  3  4  [5]  6  7  8  9  10  11  12  13  14  15  ...