Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 18.11. 서비스를 위한 인증서 설치 [링크 복사], [링크+제목 복사],
조회: 25903
글쓴 사람
정성태 (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)
13488정성태12/18/20232109오류 유형: 884. HTTP 500.0 - 명령행에서 실행한 ASP.NET Core 응용 프로그램을 실행하는 방법
13487정성태12/16/20232413개발 환경 구성: 696. C# - 리눅스용 AOT 빌드를 docker에서 수행 [1]
13486정성태12/15/20232227개발 환경 구성: 695. Nuget config 파일에 값 설정/삭제 방법
13485정성태12/15/20232121오류 유형: 883. dotnet build/restore - error : Root element is missing
13484정성태12/14/20232200개발 환경 구성: 694. Windows 디렉터리 경로를 WSL의 /mnt 포맷으로 구하는 방법
13483정성태12/14/20232330닷넷: 2184. C# - 하나의 resource 파일을 여러 프로그램에서 (AOT 시에도) 사용하는 방법파일 다운로드1
13482정성태12/13/20233002닷넷: 2183. C# - eFriend Expert OCX 예제를 .NET Core/5+ Console App에서 사용하는 방법 [2]파일 다운로드1
13481정성태12/13/20232309개발 환경 구성: 693. msbuild - .NET Core/5+ 프로젝트에서 resgen을 이용한 리소스 파일 생성 방법파일 다운로드1
13480정성태12/12/20232699개발 환경 구성: 692. Windows WSL 2 + Chrome 웹 브라우저 설치
13479정성태12/11/20232369개발 환경 구성: 691. WSL 2 (Ubuntu) + nginx 환경 설정
13477정성태12/8/20232616닷넷: 2182. C# - .NET 7부터 추가된 Int128, UInt128 [1]파일 다운로드1
13476정성태12/8/20232308닷넷: 2181. C# - .NET 8 JsonStringEnumConverter의 AOT를 위한 개선파일 다운로드1
13475정성태12/7/20232401닷넷: 2180. .NET 8 - 함수 포인터에 대한 Reflection 정보 조회파일 다운로드1
13474정성태12/6/20232225개발 환경 구성: 690. 닷넷 코어/5+ 버전의 ilasm/ildasm 실행 파일 구하는 방법 - 두 번째 이야기
13473정성태12/5/20232490닷넷: 2179. C# - 값 형식(Blittable)을 메모리 복사를 이용해 바이트 배열로 직렬화/역직렬화파일 다운로드1
13472정성태12/4/20232249C/C++: 164. Visual C++ - InterlockedCompareExchange128 사용 방법
13471정성태12/4/20232346Copilot - To enable GitHub Copilot, authorize this extension using GitHub's device flow
13470정성태12/2/20232674닷넷: 2178. C# - .NET 8부터 COM Interop에 대한 자동 소스 코드 생성 도입파일 다운로드1
13469정성태12/1/20232438닷넷: 2177. C# - (Interop DLL 없이) CoClass를 이용한 COM 개체 생성 방법파일 다운로드1
13468정성태12/1/20232334닷넷: 2176. C# - .NET Core/5+부터 달라진 RCW(Runtime Callable Wrapper) 대응 방식파일 다운로드1
13467정성태11/30/20232432오류 유형: 882. C# - Unhandled exception. System.Runtime.InteropServices.COMException (0x800080A5)파일 다운로드1
13466정성태11/29/20232605닷넷: 2175. C# - DllImport 메서드의 AOT 지원을 위한 LibraryImport 옵션
13465정성태11/28/20232344개발 환경 구성: 689. MSBuild - CopyToOutputDirectory가 "dotnet publish" 시에는 적용되지 않는 문제파일 다운로드1
13464정성태11/28/20232485닷넷: 2174. C# - .NET 7부터 UnmanagedCallersOnly 함수 export 기능을 AOT 빌드에 통합파일 다운로드1
13463정성태11/27/20232401오류 유형: 881. Visual Studio - NU1605: Warning As Error: Detected package downgrade
13462정성태11/27/20232413오류 유형: 880. Visual Studio - error CS0246: The type or namespace name '...' could not be found
1  2  3  4  5  [6]  7  8  9  10  11  12  13  14  15  ...