Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 18.2. 웹 사이트에 SSL을 적용 [링크 복사], [링크+제목 복사],
조회: 32666
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
부모글 보이기/감추기
(연관된 글이 9개 있습니다.)

2. 웹 사이트에 SSL을 적용


Dual Core가 집안의 데스크탑으로까지 들어오고 있는 시대입니다. 세상에나... 그것도 그냥 Dual Core도 아니고 ^^; 64bit Dual Core입니다. 내년에는 Quad-Core까지 발매될 예정이라고 하는데요. 이처럼 점점 더 컴퓨터가 고성능화되면서 차츰 관심을 기울이게 하는 분야갸 있지요? 바로 보안입니다. 예전에는 컴퓨터의 낮은 성능으로 인해 보안까지 신경쓸 여력이 없었지만, 이제는 상황이 바뀌어 가고 있습니다. 무엇보다도 "보안"이 최우선 과제입니다.

웹 사이트에 보안을 적용하는 가장 손쉬운 방법은 - 프로그래머일 필요도 없죠. - SSL (Secure Sockets Layer)를 적용하는 것입니다. 그런데, 중요한 문제가 하나 걸리죠. ^^; 바로 "돈"입니다. 공인된 서버 인증서를 받기 위해서는 "Verisign" 같은 업체의 인증서를 "루트"로 하는 하위 서버 인증서를 받아야 하는데, 이 비용이 일반인 입장에서는 만만치 않습니다. (물론, 대형 포탈이라면 그 정도 비용은 지불해야 할 것입니다.)

사실, "Verisign"으로부터 공인 인증서를 받아야 하는 실질적이면서도 현실적인 이유는 "사용자로 하여금 귀찮게 하지 않는다"라는 면 밖에는 없습니다. 그러한 귀찮음도 어느 정도냐면, "단 한 번의 버튼 클릭" 정도입니다. 따라서, 저 같은 경우처럼 개인적으로 운영하는 웹 사이트라면 그러한 "단 한 번의 버튼 클릭"과 서버 인증서 비용값을 바꿀 수는 없습니다. ^^ 그렇기 때문에 개인적으로 "인증서 서비스"를 돌리는 것을 충분히 고려해 볼 수 있겠습니다.

여러분들의 웹 사이트에 SSL을 적용하기 위해서는 "인증서 서비스"가 있어야 합니다. 이 서비스는 3rd-party로도 구현이 되어 있는 것으로 아는데, Windows Server 시스템이라면 기본적으로 "인증서 서비스"를 제공하고 있으므로 그것을 사용하실 것을 권장합니다. 참고로, 인증서 서비스 설치에 대해서는 "1. 윈도우즈 인증서 서비스 설치"에서 이미 알아봤으므로 생략하고, 이번에는 그렇게 설치한 인증서 서비스로부터 "서버 인증서"를 받아와서 IIS 웹 사이트에 적용하는 것을 설명드리겠습니다.

윈도우즈의 IIS 서버에서 인증서 서비스를 이용하여 SSL 설치를 하는 작업은 크게 4단계로 나눌 수 있습니다.

1. IIS 관리자에서 인증서 서비스로 보낼 "요청 파일" 준비
2. "요청 파일"을 인증서 서비스로 전달
3. 인증서 서비스에서 해당 "요청"을 승인
4. 승인되어 나온 "인증서"를 IIS 관리자에서 웹 사이트에 설치

이제부터, 각각의 단계별로 아래에서 자세히 살펴 보도록 하겠습니다.



환경 설정 가정:
  인증서 서비스가 설치된 컴퓨터 이름 : sedona2
  인증서를 설치해서 SSL 통신을 하려는 웹 사이트가 설치된 컴퓨터 이름 : sedona

1. IIS 관리자에서 인증서 서비스로 보낼 "요청 파일" 준비

1. IIS 관리자를 실행해서 "SSL"을 설치하기 원하는 "웹 사이트"를 선택한 후 "등록 정보" 창을 띄워서 "디렉터리 보안" 탭으로 이동합니다.

디렉터리 보안 설정

2. "Server Certificate..." 버튼을 누르고, 위저드를 시작합니다.

1. SSL 인증서 설치 위저드

3. 인증서 서비스로부터 새로운 서버 인증서를 받아올 것이므로, "Create a new certificate."를 선택합니다.

2. 인증서를 가져올 방식 지정

4. "인증서 요청"을 text 파일로 저장한 후, 그것을 인증서 서버에 전달할 것입니다.

3. 인증서 전달 방식 지정

5. 이름을 원하는 데로 바꿔도 됩니다. 여기서는 그냥 기본값으로 두고 "다음" 버튼을 누르겠습니다.

4. 보안값 설정

6. 원하는 값을 입력하고 "다음" 버튼을 누릅니다. 별로 중요한 사항은 아닙니다.

5. 보안값 설정

7. 자, 바로 여기가 제일 중요한 부분입니다. 여러분들의 웹 사이트에 사용자들이 입력하고 들어올 DNS 명과 일치하는 이름을 이곳에 기입해야 합니다. 만약 여러분들의 웹 사이트를 "http://www.test.com"이라고 웹 브라우저에 입력해서 들어온다면, 아래의 입력 상자에 "www.test.com"이라고 입력해야 합니다. 지금은 일단, 로컬 인트라넷 상황에서 컴퓨터 이름으로 들어온다고 가정하고, 현재의 컴퓨터 이름 (이 경우) "sedona"를 입력하겠습니다.

6. 사이트 접근 주소 명시

8. 여기도 별로 중요한 화면은 아닙니다. 적당한 값을 입력하고 "다음" 버튼을 누릅니다.

7. 지역 정보 설정

9. 위의 8번까지 설정한 것에 해당하는 인증서를 받기 위한 "요청"을 받을 파일을 지정합니다. 그냥 기본값으로 지정하겠습니다.

8. 요청 파일 저장

10. 이후에는 그냥 계속 "다음" 버튼을 눌러서 완료해 주는 것으로 일단 과정 하나는 완료가 됩니다.




2. "요청 파일"을 인증서 서비스로 전달

이제 여러분들의 하드 디스크에는 "C:\certreq.txt" 파일이 있습니다. 만약 여러분들이 "Verisign" 같은 업체에 이 텍스트 파일을 보낸다면 실제로 "서버 인증서"를 받을 수가 있습니다. 물론, 그렇게 하시면 적지않은 비용이 듭니다. ^^;

여기서는, 이미 기존에 여러분들이 "1. 윈도우즈 인증서 서비스 설치" 과정을 통해서 설치한 인증서 서비스에 "certreq.txt" 파일을 전달해서 "서버 인증서"를 받아오는 것으로 실습을 진행하겠습니다. 여기서 "인증서 서비스"는 "sedona2" 컴퓨터에 설치되어 있다는 것으로 가정하겠습니다.

1. 여러분들의 "인증서 서비스"가 설치된 컴퓨터로 IE를 통해서 다음과 같이 네비게이션합니다. 인증서 서비스가 설치된 컴퓨터 이름이 "sedona2"이므로 다음과 같이 입력합니다.

"http://sedona2/certsrv"

2. 그럼 다음과 같은 화면이 나오게 되는데요. 실제로 인증서 요청을 보내기 전에 우선, "Download a CA certificate, certificate chain, or CRL"을 선택해 줍니다.

1. 루트 인증서 설치

3. 주저하지 말고 "install this CA certificate chain." 링크를 누릅니다.

2. 루트 인증서 설치 확인

4. 그렇게 하면, 다음과 같은 내용으로 확인을 묻는 창이 뜨게 됩니다.

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.

"sedona2" 컴퓨터는 제가 설치한 컴퓨터이므로 당연히 신뢰할 수 있는 컴퓨터입니다. 여러분들도 마찬가지이고요. "Yes" 버튼을 눌러줍니다.

5. 한 번 더 다음과 같은 내용의 확인창이 뜹니다.

You are about to install a certificate from a certification authority (CA) claming to represent:

rootca.themost.pe.kr

Windows cannot validate that the certificate is actually from "rootca.themost.pe.kr". 
You should confirm its origin by contacting "rootca.themost.pe.kr". The following number will assist you in this process:

Thumbprint (sha1): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Warning:
If you install this root certificate, Windows will automatically trust any certificate issued by this CA.
Installing a certificate with an unconfirmed thumbprint is a security risk.
If you click "Yes" you acknowledge this risk.

Do you want to install this certificate?

당연히 "Yes"를 눌러줍니다.

6. 그럼, 루트 인증서를 성공적으로 설치했다는 다음의 화면이 나오게 됩니다. 한 가지 반가운 소식이라면, 위의 과정은 딱 한 번만 해주면 됩니다.

3. 루트 인증서 설치 성공

7. 계속해서, 위의 화면에서 다시 오른쪽 상단의 "Home" 링크를 통해서 다시 2번 화면으로 이동합니다. 이번에는 "Request a certificate" 링크를 선택해 줍니다.

4. 요청 전송

8. 아래의 화면에서 "advanced certificate request" 링크를 선택합니다.

5. 인증서 요청

9. IIS 관리자에서 생성해 둔 "certreq.txt" 요청 파일을 전달해야 하기 때문에 두 번째 링크인 "Submit a certificate request by using a base-64-encoded CMC or PKCS #10 file, or submit a renewal request by using a base-64-encoded PKCS #7 file."를 선택합니다.

6. 텍스트 전달 선택

10. 자, 아래의 텍스트 상자에 보시는 것과 같이 "certreq.txt" 파일의 내용을 복사해서 붙여 넣습니다.

7. 마지막 요청 화면

11. 마지막으로 "Submit" 버튼을 눌러주면, 다음과 같이 요청이 "인증서 서비스"로 전달되었다는 화면이 나옵니다. 이때 전달된 요청에 대한 처리 ID는 "2"번임을 알 수 있습니다. (ID 값은 여러분들의 상황에 따라 다르게 나올 수 있습니다.)

8. 요청 처리 완료




3. 인증서 서비스에서 해당 "요청"을 승인

자, 그럼 인증서를 발행하는 서비스 업체에서는 여러분들이 요청한 "certreq.txt" 파일을 처리해 줄 것입니다. 만약 "Verisign"이라면 그 텍스트 파일의 내용과 함께 사업자 등록증 사본까지도 팩스로 보내달라고 요청할 것입니다. 기본적인 자격에 대한 심사를 거친 후, 그들은 "certreq.txt"에 담겨진 내용에 따른 "서버 인증서"를 발행해 줄 것입니다. 현재는 여러분들이 곧 "인증서 서비스"의 담당자이므로, 여러분들이 보낸 요청을 여러분들이 처리해 주시면 되는 것인데요. 음... 이런 걸 두고 혼자서 북치고 장구치고 하는 거죠. ^^

1. 인증서 서비스가 설치된 컴퓨터에 로그인 해서, - 여기서는 'sedona2' 컴퓨터 - "시작" / "관리 도구" / "인증서 서비스" 메뉴를 선택해서 "인증서" MMC 콘솔을 실행하면 다음과 같은 창이 나타납니다.

1. 인증서 관리자 MMC 콘솔 실행

2. 여러분들은 이미 이전 "2. "요청 파일"을 인증서 서비스로 전달" 단계에서 "certreq.txt" 파일을 전달한 후, 요청에 대한 처리 ID인 "2"번을 받았다는 것을 기억하실 텐데요. 실제로 아래와 같이 "Pending Requests" 노드를 클릭하면 "Request ID"가 2번에 해당하는 인증서 요청이 있음을 확인할 수 있습니다. 이제 이것을 오른쪽 마우스 버튼 메뉴를 이용해서 발행(Issue)해 줍니다.

2. 보류 중인 인증서 발생

3. 그렇게 되면, 보류 중이었던 인증서는 곧바로 발행되어지고, 아래와 같이 "Issued Certificates" 영역으로 이동하게 됩니다. 이제, 여러분들은 인증서 요청을 했던 당사자에게 인증서가 발행이 되었으니 사용하라고 메일과 같은 수단을 이용해서 알려주시면 됩니다. (지금의 상황에서는 여러분들이 알고 있는 것으로 끝나지만.)

3. 발행된 인증서 확인




4. 승인되어 발행된 "인증서"를 IIS 관리자에서 웹 사이트에 설치

자, 이제 마지막 단계입니다. 여러분들이 보낸 "certreq.txt" 파일은 인증서 발행 기관에 의해서 처리되었으며 여러분들은 그 사실을 통보 받았습니다. 남은 작업은, 발행된 인증서를 받아서 웹 사이트에 설치하는 것입니다.

1. 발행된 인증서를 다운로드 받기 위해 "http://sedona2/certsrv"에 방문합니다. 이번에는 "View the status of a pending certificate request" 메뉴를 선택합니다.

인증서 관리 웹 화면

2. 여러분들이 보냈던 인증서 요청 기록이 남아 있습니다. 링크를 클릭합니다.

요청 기록

3. 오... 여러분들의 인증서가 처리되었으니, 다운로드 받을 수 있도록 "링크"가 제공되고 있습니다. IIS에서는 모두 처리할 수 있으므로 "DER" 포맷이든 "Base64" 포맷이든 상관없습니다. 링크를 눌러줍니다.

발행된 인증서

4. 그렇게 되면 다운로드 창이 뜨게 되고, 파일을 저장할 위치를 물어옵니다. 여기서는 해당 파일을 "C:\certnew.p7b"에 저장한 걸로 가정하겠습니다.

5. IIS 관리자를 실행시키고, 최초에 인증서를 요청했던 웹 사이트의 등록 정보 창에서 "Directory Security" 탭을 누른 후, "Server Certifiate..." 버튼을 눌러 줍니다.

6. 위저드 화면이 뜨게 되고, 다음 버튼을 누르면 아래와 같이 묻는 창이 나옵니다. 이전에 요청했던 대로 받은 인증서를 설치할 것이므로 "Process the pending request and install the certificate"를 선택하고 "다음" 버튼을 누릅니다.

인증서 설치 단계 선택

7. 위의 "4번" 단계에서 "c:\certnew.p7b"라고 저장했으므로, 그 파일을 선택해 줍니다.

인증서 선택

8. 포트는 원하는 것을 선택합니다. 기본적으로 포트 명시를 하지 않고 사용자에게 접근하도록 하려면 HTTPS의 기본 포트인 443을 그대로 놓고 "다음" 버튼을 누릅니다.

포트 선택



이로써, 모든 과정이 완료되었습니다. 이제 여러분들은 "https://sedona/"와 같은 경로를 통해서 여러분들의 웹 사이트의 통신 내용을 통째로 암호화해서 클라이언트와 주고 받을 수 있습니다.



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

[연관 글]






[최초 등록일: ]
[최종 수정일: 6/25/2021]

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

비밀번호

댓글 작성자
 



2013-05-23 09시28분
[김영대] 개념없이 엉뚱한 질문드립니다. 죄송합니다.

sedona2 와 sedona는 한 서버에서 운영하게 되면 문제가 있을까요 (인증서서버와 IIS 서버는 같은 서버로 )

실제 테스트 환경에 구성이 좀 어려워서 그렇습니다.

해보지도 않고 여쭤봐서 죄송합니다 (__)
[guest]
2013-05-23 01시37분
문제없습니다. 마치 웹 서버와 DB 서버를 분리하는 것과 같은 식일 뿐이니까요. ^^
정성태
2015-10-21 04시53분
정성태

... [16]  17  18  19  20  21  22  23  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
13238정성태1/31/20235888.NET Framework: 2092. IIS 웹 사이트를 TLS 1.2 또는 TLS 1.3 프로토콜로만 운영하는 방법
13237정성태1/30/20235575.NET Framework: 2091. C# - 웹 사이트가 어떤 버전의 TLS/SSL을 지원하는지 확인하는 방법
13236정성태1/29/20235129개발 환경 구성: 663. openssl을 이용해 인트라넷 IIS 사이트의 SSL 인증서 생성
13235정성태1/29/20234691개발 환경 구성: 662. openssl - 윈도우 환경의 명령행에서 SAN 적용하는 방법
13234정성태1/28/20235785개발 환경 구성: 661. dnSpy를 이용해 소스 코드가 없는 .NET 어셈블리의 코드를 변경하는 방법 [1]
13233정성태1/28/20237168오류 유형: 840. C# - WebClient로 https 호출 시 "The request was aborted: Could not create SSL/TLS secure channel" 예외 발생
13232정성태1/27/20234915스크립트: 43. uwsgi의 --processes와 --threads 옵션
13231정성태1/27/20233878오류 유형: 839. python - TypeError: '...' object is not callable
13230정성태1/26/20234242개발 환경 구성: 660. WSL 2 내부로부터 호스트 측의 네트워크로 UDP 데이터가 1개의 패킷으로만 제한되는 문제
13229정성태1/25/20235263.NET Framework: 2090. C# - UDP Datagram의 최대 크기
13228정성태1/24/20235353.NET Framework: 2089. C# - WMI 논리 디스크가 속한 물리 디스크의 정보를 얻는 방법 [2]파일 다운로드1
13227정성태1/23/20235040개발 환경 구성: 659. Windows - IP MTU 값을 바꿀 수 있을까요? [1]
13226정성태1/23/20234736.NET Framework: 2088. .NET 5부터 지원하는 GetRawSocketOption 사용 시 주의할 점
13225정성태1/21/20233929개발 환경 구성: 658. Windows에서 실행 중인 소켓 서버를 다른 PC 또는 WSL에서 접속할 수 없는 경우
13224정성태1/21/20234339Windows: 221. Windows - Private/Public/Domain이 아닌 네트워크 어댑터 단위로 방화벽을 on/off하는 방법
13223정성태1/20/20234521오류 유형: 838. RDP 연결 오류 - The two computers couldn't connect in the amount of time allotted
13222정성태1/20/20234211개발 환경 구성: 657. WSL - DockerDesktop.vhdx 파일 위치를 옮기는 방법
13221정성태1/19/20234409Linux: 57. C# - 리눅스 프로세스 메모리 정보파일 다운로드1
13220정성태1/19/20234514오류 유형: 837. NETSDK1045 The current .NET SDK does not support targeting .NET ...
13219정성태1/18/20234071Windows: 220. 네트워크의 인터넷 접속 가능 여부에 대한 판단 기준
13218정성태1/17/20234006VS.NET IDE: 178. Visual Studio 17.5 (Preview 2) - 포트 터널링을 이용한 웹 응용 프로그램의 외부 접근 허용
13217정성태1/13/20234616디버깅 기술: 185. windbg - 64비트 운영체제에서 작업 관리자로 뜬 32비트 프로세스의 덤프를 sos로 디버깅하는 방법
13216정성태1/12/20234857디버깅 기술: 184. windbg - 32비트 프로세스의 메모리 덤프인 경우 !peb 명령어로 나타나지 않는 환경 변수
13215정성태1/11/20236507Linux: 56. 리눅스 - /proc/pid/stat 정보를 이용해 프로세스의 CPU 사용량 구하는 방법 [1]
13214정성태1/10/20235979.NET Framework: 2087. .NET 6부터 SourceGenerator와 통합된 System.Text.Json [1]파일 다운로드1
13213정성태1/9/20235475오류 유형: 836. docker 이미지 빌드 시 "RUN apt install ..." 명령어가 실패하는 이유
... [16]  17  18  19  20  21  22  23  24  25  26  27  28  29  30  ...