개발 환경 구성 : 284 . " Let ' s Encrypt " 에서 제공 하 는 무료 SSL 인증서 를 IIS 에 적용 하 는 방법 ( 1 ) 
 성태 의 닷 넷 이야기 
 홈 주인 모아 놓 은 자료 프로그래밍 질문 / 답변 사용 자 관리 
 아티 클 외부 아티 클 유용 한 코드 온라인 기능 MathJax 입력 기 
 저작 도서 
 [ 예제 코드 다운로드 ] 
 If you want to handle the HTTP Challenge manually , use Method # 2 . 
 If you want to handle the DNS Challenge manually , use Method # 3 
 제 경우 에 는 , Azure 에 올려진 제 블로그 에 적용 할 것 이 므로 수작업 으로 진행 해야 하 므로 두 번 째 방법 을 택했 습니다 . 
 PS C : \ Users \ Tester > Complete - ACMEChallenge myblogdns 1 - ChallengeType http - 01 - Handler manual 
 * Handle Time : [ 2016 - 05 - 03 오후 11 : 53 : 01 ] 
 * Challenge Token : [ WRY 1 jLcW . ..[ 생략 ] . .. i _ 2 sBI 8 s ] 
 To complete this Challenge please create a new file 
 under the server that is responding to the hostname 
 and path given with the following characteristics : 
 * HTTP URL : [ https : / / www . sysnet . pe . kr / . well - known / acme - challenge / WRY 1 jLc . ..[ 생략 ] . .. Ii _ 2 sBI 8 s ] 
 * File Path : [. well - known / acme - challenge / WRY 1 jLcW . ..[ 생략 ] . .. 2 sBI 8 s ] 
 * File Content : [ WRY 1 jLcWYcVO 55 . ..[ 생략 ] . .. jB _ NHLhicrfTj 2 Bo ] 
 * MIME Type : [ text / plain ] 
 IdentifierPart : ACMESharp . Messages . IdentifierPart 
 IdentifierType : dns 
 Identifier : www . sysnet . pe . kr 
 Uri : https : / / acme - v 01 . api . letsencrypt . org / acme / authz / ...[ 생략 ] . .. 
 Status : pending 
 Expires : 2016 - 05 - 10 오후 2 : 45 : 01 
 위 의 메시지 에 대한 의미 는 간단 합니다 . " HTTP URL " 이 여러분 들 의 웹 사이트 이 므로 " https : / / www . sysnet . pe . kr / . well - known / acme - challenge / WRY 1 jLc . ..[ 생략 ] . .. Ii _ 2 sBI 8 s " 경로 를 방문 하 면 " File Content " 로 지정 된 내용 인 " WRY 1 jLcWYcVO 55 . ..[ 생략 ] . .. jB _ NHLhicrfTj 2 Bo " 을 반환 할 수 있 도록 파일 을 생성 해 주 면 됩니다 . ( 잊 지 말 고 , Visual Studio 의 속성 창 에서 해당 파일 의 " Build Action " 을 " Content " 로 설정 합니다 . 그렇 지 않 으면 배포 에 포함 되 지 않 습니다 . ) 
 단지 , 해당 파일 이 확장자 가 없 기 때문 에 " text / plain " 으로 인식 해 주 려면 . well - known / acme - challenge / 폴더 에 web . config 파일 도 함께 생성 해서 다음 과 같 은 설정 을 추가 해 줍니다 . 
 확인 을 위해 꼭 웹 브라우저 로 " https : / / www . sysnet . pe . kr / . well - known / acme - challenge / WRY 1 jLc . ..[ 생략 ] . .. Ii _ 2 sBI 8 s " 경로 를 방문 해 보 고 " F 12 " 키 를 눌러 " Developer Tools " 의 " Network " 탭 을 이용 해 해당 파일 의 " Content type " 이 " text / plain " 으로 나오 는지 보 면 좋 습니다 . 
 준비 가 되 었 으면 도메인 의 소유자 임 을 " Let ' s encrypt " 측 에 확인 하 라고 다음 의 명령 을 내려 줍니다 . 
 PS C : \ Users \ Tester > Submit - ACMEChallenge myblogdns 1 - ChallengeType http - 01 
 Uri : https : / / acme - v 01 . api . letsencrypt . org / acme / authz / 8 c 7 cHBK 5 xMF 8 SEDc 0 t 9 KT _ OYok 6 OFEaI 5 uWqgxfpNQg 
 보 시 면 상태 가 " pending " 으로 나옵니다 . 이게 완료 될 때 까지 기다려야 하 는데요 . 다음 의 명령어 로 한 번 씩 확인 해 볼 수 있 습니다 . ( 금방 상태 가 확정 됩니다 . ) 
 ChallengePart : ACMESharp . Messages . ChallengePart 
 Challenge : ACMESharp . ACME . HttpChallenge 
 Type : http - 01 
 Uri : https : / / acme - v 01 . api . letsencrypt . org / acme / challenge / 8 c 7 cHBK 5 xMF 8 SEDc 0 t 9 KT _ OYok 6 OFEaI 5 uWqgxfpNQg / 69449312 
 Token : WRY 1 jLcWYcVO 55 PhB 1 h 6 fUTzUQs 1 uRbaGsIi _ 2 sBI 8 s 
 Status : invalid 
 OldChallengeAnswer : [, ] 
 ChallengeAnswerMessage : 
 HandlerName : manual 
 HandlerHandleDate : 2016 - 05 - 03 오후 11 : 53 : 01 
 HandlerCleanUpDate : 
 SubmitDate : 2016 - 05 - 04 오전 12 : 59 : 08 
 저렇 게 invalid 로 나오 면 , " New - ACMEIdentifier " 단계 로 돌아가 서 다시 진행 해야 합니다 . 따라서 , 이렇게 되 면 Identifier 까지 변경 해야 하 므로 다음 과 같이 이름 을 바꿔서 다시 진행 해 줍니다 . 
 PS C : \ Users \ Tester > New - ACMEIdentifier - Dns www . sysnet . pe . kr - Alias myblogdns 2 
 Uri : https : / / acme - v 01 . api . letsencrypt . org / acme / authz / EY 0 wWw 0 bW 1 qdwATTtEwZrvzB 8 UJBi 7 nIjl 7 BeIata 88 
 Expires : 2016 - 05 - 10 오후 4 : 10 : 00 
 참고 로 , 제 경우 에 " invalid " 로 나왔 던 원인 은 해당 파일 이 " UTF - 8 with signature " 형식 으로 저장 되 어 발생 한 문제 였 습니다 . 그래서 " ASCII " 형식 으로 메모장 을 이용 해 다시 저장 한 후 웹 사이트 를 배포 해 " Status : valid " 상태 까지 진행 했 습니다 . 
 Uri : https : / / acme - v 01 . api . letsencrypt . org / acme / challenge / EY 0 wWw 0 bW 1 qdwATTtEwZrvzB 8 UJBi 7 nIjl 7 BeIata 8 
 8 / 69514095 
 Token : 3 lA 782 rH 5 W 43 rIX _ rTwi 3 zSdjPRgILkajdKAIfnH 2 y 8 
 Status : valid 
 HandlerHandleDate : 2016 - 05 - 04 오전 1 : 10 : 38 
 SubmitDate : 2016 - 05 - 04 오전 1 : 21 : 29 
 드디어 , 인증서 를 받 을 차례 가 왔 군요 . ^^ 로컬 에 인증서 를 하나 만들 고 그것 을 " Let ' s encrypt " 측 CA 서버 에 전달 합니다 . 
 PS C : \ Users \ Tester > New - ACMECertificate myblogdns 2 - Generate - Alias sysnetCert 1 
 Id : 2117 d 473 - 8887 - 4 a 0 d - 94 c 4 - dcedb 23 c 591 b 
 Alias : sysnetCert 1 
 Label : 
 Memo : 
 IdentifierRef : b 96 ca 243 - 869 e - 422 e - 8 c 15 - e 63 aaca 5 bba 5 
 IdentifierDns : www . sysnet . pe . kr 
 AlternativeIdentifierDns : 
 KeyPemFile : 
 CsrPemFile : 
 GenerateDetailsFile : 2117 d 473 - 8887 - 4 a 0 d - 94 c 4 - dcedb 23 c 591 b - gen . json 
 CertificateRequest : 
 CrtPemFile : 
 CrtDerFile : 
 IssuerSerialNumber : 
 SerialNumber : 
 Thumbprint : 
 Signature : 
 SignatureAlgorithm : 
 PS C : \ Users \ Tester > Submit - ACMECertificate sysnetCert 1 
 KeyPemFile : 2117 d 473 - 8887 - 4 a 0 d - 94 c 4 - dcedb 23 c 591 b - key . pem 
 CsrPemFile : 2117 d 473 - 8887 - 4 a 0 d - 94 c 4 - dcedb 23 c 591 b - csr . pem 
 CertificateRequest : ACMESharp . CertificateRequest 
 CrtPemFile : 2117 d 473 - 8887 - 4 a 0 d - 94 c 4 - dcedb 23 c 591 b - crt . pem 
 CrtDerFile : 2117 d 473 - 8887 - 4 a 0 d - 94 c 4 - dcedb 23 c 591 b - crt . der 
 SerialNumber : 036803 E 45525487 CD 7 F 7 E 1030337 C 3070 F 08 
 Thumbprint : CC 5 D 8 A 0 EBA 4 C 72 BB 42308 A 851261 A 3 FBFCBC 115 E 
 Signature : CC 5 D 8 A 0 EBA 4 C 72 BB 42308 A 851261 A 3 FBFCBC 115 E 
 SignatureAlgorithm : sha 256 RSA 
 PS C : \ Users \ Tester > Update - ACMECertificate sysnetCert 1 
 IssuerSerialNumber : 0 A 0141420000015385736 A 0 B 85 ECA 708 
 정상 적 으로 인증서 가 발급 되 었 으니 , 이제 pfx 파일 로 export 시킨 다음 , 
 PS C : \ Users \ Tester > Get - ACMECertificate sysnetCert 1 - ExportPkcs 12 " c : \ temp \ sysnetCert 1 . pfx " - CertificatePassword ' mypassword ' 
 파일 로 나온 sysnetCert 1 . pfx 인증서 를 IIS 서버 에 설치 해 주 면 됩니다 . 
 IIS 서버 는 나중 에 적용 해 보 고 , 우선 내보내 기 된 . pfx 파일 을 탐색기 에서 더블 클릭 을 이용 한 ' 가져오 기 ' 로 다음 의 글 에 설명 한 방법 으로 설치 할 수 있 습니다 . 
 5 . 1 인증서 관리 - 내보내 기 / 가져오 기 
 . pfx 파일 을 가져오 기 했 으면 이제 ' 인증서 관리자 ' 를 통해 살펴볼 수 있 습니다 . 
 5 . 3 인증서 관리 - 인증서 MMC 관리자 
 아래 의 그림 에서 보 는 것 처럼 , 
 오직 , HTTPS 관련 통신 을 위한 보안 용도 로 만 사용 할 수 있 을 뿐 그 외 의 ' 코드 사이닝 ' 과 같 은 용도 로 는 사용 할 수 없 습니다 . 
 마지막 으로 인증 경로 는 다음 과 같 습니다 . 
 DST Root CA X 3 
 . ..[ your cert ] . ... 
 참고 로 , 오류 가 발생 했 던 경우 하나 를 공유 합니다 . 다음 과 같이 pfx 내보내 기 에서 오류 가 발생 했 는데요 . 
 + Get - ACMECertificate sysnetCert 1 - ExportPkcs 12 " c : \ temp \ sysnetCert 1 . pf . .. 
 + CategoryInfo : NotSpecified : ( : ) [ Get - ACMECertificate ] , InvalidOperationException 
 + FullyQualifiedErrorId : System . InvalidOperationException , ACMESharp . POSH . GetCertificate 
 Submit - ACMECertificate 명령어 의 결과 에 다음 과 같이 IssuerSerialNumber 가 비 어 있 는데 아마 처리 가 완료 되 지 않 은 탓 으로 보입니다 . 
 검색 해 보 니 , 
 Update - ACMECertificate 명령어 를 해 주 라는 말 이 나와서 실행 했 는데 , 이번 에 는 IssuerSerialNumber 의 값 이 채워져 있 었 습니다 . 
 따라서 , 저 값 이 제대로 채워져 있 는지 검사 한 후 에 인증서 내보내 기 를 하 면 잘 될 것 입니다 . 
 좋 은 참고 자료 가 있 는데요 . 아래 는 동영상 으로 이 글 의 내용 을 소개 하 고 있 습니다 . 
 March 2016 : How to install Let ' s Encrypt Free SSL certificates on Windows Server and IIS 
 그리고 , " Let ' s Encrypt " 를 위한 Azure 사이트 확장 도 있 습니다 . 
 Azure Let ' s Encrypt ( x 86 ) 
 Azure Let ' s Encrypt ( x 64 ) 
 [ 이 글 에 대해서 여러분 들 과 의견 을 공유 하 고 싶 습니다 . 틀리 거나 미흡 한 부분 또는 의문 사항 이 있 으시 면 언제 든 댓글 남겨 주 십시오 . ] 
 [ 최초 등록 일 : 5 / 6 / 2016 ] 
 [ 최종 수정 일 : 5 / 6 / 2016 ] 
 by SeongTae Jeong , mailto : techsharer @ outlook . com 
 댓글 쓴 사람 
 2016 - 06 - 08 04 시 20 분 
 [ 웅 이 ] 엄청나 군요 ~ ㅎ 
 [ 손님 ] 
 2017 - 06 - 22 07 시 24 분 
 [ 미정 ] 혹시 3 개월 마다 자동 갱신 되 도록 할 수 는 없 나요 ? 
 2017 - 06 - 22 12 시 38 분 
 저 도 안 해 봤 지만 , 다음 의 글 을 참고 하 세요 . 
 Managing LetsEncrypt Certificate expiration and auto - renewals 
 A Simple ACME Client for Windows 
 정성태 
 1 2 3 4 [ 5 ] 6 7 8 9 10 11 12 13 14 15 . .. 
 Cnt . 
 11906 정성태 5 / 21 / 2019 300 . NET Framework : 835 . . NET Core / C # - 리눅스 syslog 에 로그 남기 는 방법 
 11905 정성태 5 / 21 / 2019 349 . NET Framework : 834 . C # - 폴더 경로 문자열 에서 "..", "." 표기 를 고려 한 최종 문자열 을 얻 는 방법 - 두 번 째 이야기 
 11904 정성태 5 / 21 / 2019 439 . NET Framework : 833 . C # - Open Hardware Monitor 를 이용 한 CPU 온도 정보 1 
 11903 정성태 5 / 21 / 2019 449 오류 유형 : 540 . . NET Core - System . P l a t formNotSupportedException : The named version of this synchronization primitive is not supported on this platform . 
 11902 정성태 5 / 21 / 2019 261 오류 유형 : 539 . mstest 실행 시 " The directory name is invalid . " 오류 발생 
 11900 정성태 5 / 18 / 2019 361 오류 유형 : 537 . " sfc / scannow " 실행 중 시스템 이 부팅 되 는 현상 
 11899 정성태 5 / 17 / 2019 585 Linux : 9 . Linux 에서 윈도우 의 OutputDebugString 대신 사용 할 수 있 는 syslog [ 1 ] 
 11898 정성태 5 / 20 / 2019 475 VC ++: 130 . C ++ string 의 c _ str 과 data 함수 의 차이점 [ 3 ] 
 11897 정성태 5 / 16 / 2019 687 오류 유형 : 536 . Visual Studio - " Developer Pack " 을 설치 했 는데도 " 대상 프레임워크 " 목록 에 나오 지 않 는 경우 
 11896 정성태 5 / 15 / 2019 437 개발 환경 구성 : 440 . C #, C ++ - double 의 Infinity , NaN 표현 방식 1 
 11895 정성태 5 / 12 / 2019 558 . NET Framework : 832 . ML . NET Model Builder - 회귀 ( Regression ) , 다중 분류 ( Multi - class classification ) 예제 1 
 11894 정성태 5 / 12 / 2019 656 VS . NET IDE : 135 . Visual Studio - ML . NET Model Builder 소개 [ 1 ] 
 11893 정성태 5 / 10 / 2019 465 오류 유형 : 535 . C # 6 . 0 이상 의 문법 을 컴파일 시 오류 가 발생 한다면 ? 
 11892 정성태 5 / 10 / 2019 392 웹 : 38 . HTTP Cookie 의 expires 시간 형식 ( RFC 7231 ) 
 11891 정성태 5 / 9 / 2019 451 . NET Framework : 831 . ( 번역 글 ) . NET Internals Cookbook Part 12 - Memory structure , attributes , handles 
 11890 정성태 5 / 8 / 2019 376 개발 환경 구성 : 439 . " Visual Studio Enterprise is required to execute the test . " 메시지 와 관련 된 코드 기록 
 11889 정성태 5 / 8 / 2019 342 개발 환경 구성 : 438 . mstest , QTAgent 의 로그 파일 설정 방법 
 11888 정성태 5 / 8 / 2019 478 . NET Framework : 830 . C # - 비동기 호출 을 취소 하 는 CancellationToken 의 간단 한 예제 코드 1 
 11887 정성태 5 / 8 / 2019 595 . NET Framework : 829 . C # - yield 문 을 사용 할 수 있 는 메 서드 의 조건 
 11886 정성태 5 / 8 / 2019 464 오류 유형 : 534 . mstest . exe 실행 시 " Visual Studio Enterprise is required to execute the test . " 오류 
 11885 정성태 5 / 7 / 2019 321 오류 유형 : 533 . mstest . exe 실행 시 " File extension specified '. loadtest ' is not a valid test extension . " 오류 발생 
 11884 정성태 5 / 5 / 2019 556 . NET Framework : 828 . C # DLL 에서 Win 32 C / C ++ 처럼 dllexport 함수 를 제공 하 는 방법 - 두 번 째 이야기 
 11883 정성태 5 / 3 / 2019 557 . NET Framework : 827 . C # - 인터넷 시간 서버 로부터 받 은 시간 을 윈도우 에 적용 하 는 방법 1 
 11882 정성태 5 / 9 / 2019 457 . NET Framework : 826 . ( 번역 글 ) . NET Internals Cookbook Part 11 - Various C # riddles 1 
 11881 정성태 4 / 28 / 2019 536 오류 유형 : 532 . . NET Core 프로젝트 로 마이 그레 이 션 시 " CS 0579 Duplicate ' System . Reflection . AssemblyCompanyAttribute ' attribute " 오류 발생 
 이 사이트 에 게재 된 문서 는 어떤 보증도 포함 하 지 않 습니다 .