Windows 10의 로컬 개발 환경에서 인증서 발행

이마


[2021-06-10] 역시 WSL에 있는certbot에서 하는 것이 비교적 수월하기 때문에 나는 그 방법을 보충했다.
로컬 개발 환경에서도 HTTPS가 필요한데 조사하다'진짜'증명서를 사용해 HTTPS화하는 방법을 발견했다.
  • 로컬 개발 환경의https화|블로그.jxck.io
  • 이번에는 WSL 없이 Windows 10 로컬 환경에서 인증서 발행 고객인 Windows ACME Simple(WACS)을 사용합니다.
    여기에 사용된 WACS의 버전은 2.1.17.1065(release,trimmed,standalone,64-bit)이다.

    차리다


    도메인 설정


    사전 준비로 자신의 모든 도메인의 하위 도메인test.suzume.dev을 127..0.1 방향으로 A 레코드로 등록합니다.
    test.suzume.dev. 10800 IN A 127.0.0.1
    

    인증서 클라이언트 설치


    인증서 게시 클라이언트 WACS는 다음 링크에서 사용할 수 있습니다.
  • win-acme/win-acme: A simple ACME client for Windows (for use with Let's Encrypt et al.)
  • 이 창고의 Releases에서 다운로드win-acme.v2.x.x.xx.x64.trimmed.zip

  • 펼치기C:/Apps/win-acme(좋아하는 곳일 수 있음)
  • 인증서를 발행하기 위해 C:/Apps/win-acme/wacs.exe를 실행할 수 있습니다.실행하면 대화 형식으로 수속을 진행할 수 있다.
    웹 서버가 IIS인 경우 WACS는 IIS(관리자 권한이 필요함)를 설정할 수 있지만 Apache와 Nginx를 사용하기 때문에 관리자 권한이 필요하지 않습니다.

    증서를 발행하다


    그 다음에 상세하게 설명하고 대략적인 절차는 다음과 같다.
  • (처음만) Let's Encerypt의 사용 규약에 동의하고 문제가 있을 때 연락처를 입력
  • 인증서를 발행할 도메인 입력
  • DNS 레코드를 수동으로 만드는 방법
  • 을 도메인 소유자를 확인하는 방법(처음 인증서를 발급한 도메인만)으로 선택합니다.
  • 인증서의 형식 및 저장 위치 선택
  • 지정된 TXT 레코드를 등록하여 도메인 소유자임을 확인합니다
  • .
  • 완료된 인증서를 웹 서버에 설치
  • 상세 단계


    방금 설명한 바에 의하면 이 견해는 뛰어넘을 수 있다.
    여기에 적힌 는 Enter 키를 누르는 것입니다.

  • WACS를 시작하고 모든 수동 설정을 선택합니다.
    > .\wacs.exe
      
        A simple Windows ACMEv2 client (WACS)
        Software version 2.1.17.1065 (release, trimmed, standalone, 64-bit)
        Connecting to https://acme-v02.api.letsencrypt.org/...
        Scheduled task not configured yet
        Please report issues at https://github.com/win-acme/win-acme
    		
        N: Create certificate (default settings)
        M: Create certificate (full options)
        R: Run renewals (0 currently due)
        A: Manage renewals (0 total)
        O: More options...
        Q: Quit
       
        Please choose from the menu: M <ENTER>
    

  • (처음으로만) Let's Encerypt의 사용 규약에 동의하고 문제가 있을 때 연락처를 입력하십시오.
       Terms of service:   C:\ProgramData\win-acme\acme-v02.api.letsencrypt.org\LE-SA-v1.2-November-15-2017.pdf
      
       Open in default application? (y/n*) - y <ENTER>
      
       Do you agree with the terms? (y*/n) - y <ENTER>
       
       Enter email(s) for notifications about problems and abuse (comma-separated): 連絡先メールアドレス <ENTER>
    

  • 도메인 설정 방법 2: Manual input
      1: Read site bindings from IIS
      2: Manual input
      3: CSR created by another program
      C: Abort
      
      How shall we determine the domain(s) to include in the certificate?: 2 <ENTER>
    

  • 도메인 정보 입력
      How shall we determine the domain(s) to include in the certificate?: test.suzume.dev <ENTER>
      
      Target generated using plugin Manual: test.suzume.dev
      
       Suggested friendly name '[Manual] test.suzume.dev', press <Enter> to accept or type an alternative: test.suzume.dev <ENTER>
    

  • 도메인 이름 소유 확인: DNS 레코드 선택
        The ACME server will need to verify that you are the owner of the domain
        names that you are requesting the certificate for. This happens both during
        initial setup *and* for every future renewal. There are two main methods of
        doing so: answering specific http requests (http-01) or create specific dns
        records (dns-01). For wildcard domains the latter is the only option. Various
        additional plugins are available from https://github.com/win-acme/win-acme/.
      
       1: [http-01] Save verification files on (network) path
       2: [http-01] Serve verification files from memory
       3: [http-01] Upload verification files via FTP(S)
       4: [http-01] Upload verification files via SSH-FTP
       5: [http-01] Upload verification files via WebDav
       6: [dns-01] Create verification records manually (auto-renew not possible)
       7: [dns-01] Create verification records with acme-dns (https://github.com/joohoi/acme-dns)
       8: [dns-01] Create verification records with your own script
       9: [tls-alpn-01] Answer TLS verification request from win-acme
       C: Abort
      
       How would you like prove ownership for the domain(s)?: 6 <ENTER>
    

  • CSR 암호화 기본값 2: RSA 키
        After ownership of the domain(s) has been proven, we will create a
        Certificate Signing Request (CSR) to obtain the actual certificate. The CSR
        determines properties of the certificate like which (type of) key to use. If
        you are not sure what to pick here, RSA is the safe default.
      
       1: Elliptic Curve key
       2: RSA key
       C: Abort
      
       What kind of private key should be used for the certificate?: 2 <Enter>
    

  • 인증서 또는 키 파일 형식 선택2: PEM encoded files
        When we have the certificate, you can store in one or more ways to make it
        accessible to your applications. The Windows Certificate Store is the default
        location for IIS (unless you are managing a cluster of them).
      
       1: IIS Central Certificate Store (.pfx per host)
       2: PEM encoded files (Apache, nginx, etc.)
       3: PFX archive
       4: Windows Certificate Store
       5: No (additional) store steps
      
       How would you like to store the certificate?: 2 <ENTER>
    

  • 인증서 저장 위치 지정
       Path to folder where .pem files are stored: C:\path\to\certs\test.suzume.dev <ENTER>
    

  • pfx 파일의 비밀번호는 1:None일 수 있습니다
       1: None
       2: Type/paste in console
       3: Search in vault
      
       Password to use for the .pfx files: 1 <ENTER>
    

  • 다른 형식의 파일을 만들지 묻습니다. 필요하지 않기 때문에 5: NO (additional) store steps 를 선택하십시오.
       1: IIS Central Certificate Store (.pfx per host)
       2: PEM encoded files (Apache, nginx, etc.)
       3: PFX archive
       4: Windows Certificate Store
       5: No (additional) store steps
      
       Would you like to store it in another way too?: 5 <ENTER>
    

  • IIS를 사용하지 않았기 때문에 4:아니오(additional) 설치 steps 를 선택합니다.
       Installation plugin IIS not available: No supported version of IIS detected.
      
        With the certificate saved to the store(s) of your choice, you may choose one
        or more steps to update your applications, e.g. to configure the new
        thumbprint, or to update bindings.
      
       1: Create or update https bindings in IIS
       2: Create or update ftps bindings in IIS
       3: Start external script or program
       4: No (additional) installation steps
      
       Which installation step should run first?: 4 <ENTER>
    

  • (첫 번째 도메인만 해당) 도메인 이름 소유를 확인합니다.화면에 표시된 대로 TXT 레코드를 설정하고 Enter 키를 누릅니다.
       First chance error calling into ACME server, retrying with new nonce...
       [test.suzume.dev] Authorizing...
       [test.suzume.dev] Authorizing using dns-01 validation (Manual)
      
       Domain:              test.suzume.dev
       Record:              _acme-challenge.test.suzume.dev
       Type:                TXT
       Content:             "v1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
       Note:                Some DNS managers add quotes automatically. A single set
                            is needed.
      
       Please press <Enter> after you've created and verified the record <DNS に上記レコードを追加して ENTER>
    

  • 도메인의 모든 확인이 완료되면 TXT 레코드를 삭제해야 하므로
       [test.suzume.dev] Preliminary validation succeeded
       [test.suzume.dev] Preliminary validation succeeded
       [test.suzume.dev] Authorization result: valid
      
       Domain:              test.suzume.dev
       Record:              _acme-challenge.test.suzume.dev
       Type:                TXT
       Content:             "v1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
      
       Please press <Enter> after you've deleted the record <DNS から上記レコードを削除して ENTER>
    

  • 증명서를 발행하다.마지막 질문이 어떻게 될지는 모르니까 일단 얘기하지 말자
       Requesting certificate test.suzume.dev
       Store with CertificateStore...
       Installing certificate in the certificate store
       Adding certificate test.suzume.dev @ 2021/5/10 14:10:08 to store My
       Installing with None...
       Adding Task Scheduler entry with the following settings
       - Name win-acme renew (acme-v02.api.letsencrypt.org)
       - Path C:\Apps\win-acme
       - Command wacs.exe --renew --baseuri "https://acme-v02.api.letsencrypt.org/"
       - Start at 09:00:00
       - Random delay 02:00:00
       - Time limit 02:00:00
      
       Do you want to specify the user the task will run as? (y/n*) - n <ENTER>
      
       Adding renewal for test.suzume.dev
       Next renewal scheduled at 2021/7/4 14:08:35
       Certificate test.suzume.dev created
    
  • 웹 서버에 설정


    아파치의 경우


    <VirtualHost *:443>
    	ServerName test.suzume.dev
    	
    	SSLEngine on
    	SSLProtocol +TLSv1.2
    	SSLCertificateFile C:/path/to/certs/test.suzume.dev/test.suzume.dev-crt.pem
    	SSLCertificateKeyFile C:/path/to/certs/test.suzume.dev/test.suzume.dev-key.pem
    	SSLCertificateChainFile C:/path/to/certs/test.suzume.dev/test.suzume.dev-chain.pem
    
    	# ...
    </VirtualHost>
    

    Nginx의 경우


    server {
    	listen 443 ssl;
    	server_name test.suzume.dev;
    
    	ssl_certificate C:/path/to/certs/test.suzume.dev/test.suzume.dev-crt.pem;
    	ssl_certificate_key C:/path/to/certs/test.suzume.dev/test.suzume.dev-key.pem;
    
    	# ...
    }
    

    다른 방법: WSL에서 certbot 사용


    맥OS의certbot에서 이전과 같은 내용을 시도해 보았는데 선택한 항목이 적고 간단해서 Windows도certbot으로 해 보기로 했습니다.

    certbot 설치


    WSL이 운영하는 우분투 18.04에 장착할 수 있는certbot은 오래(2018년 9월 발행)됐지만, 증명서 발행에는 문제가 없었다.
    % sudo apt install certbot
    % certbot --version
    certbot 0.27.0
    

    PowerShell 설정


    WSL을 하나하나 전환하는 것은 번거롭기 때문에 PowerShell에서부터certbot을 사용하도록 설정합니다.
    먼저 WSL에서certbot의 작업 디렉토리를 준비합니다.certbot을 시작하려면 루트 권한이 필요하지만 WSL sudo에서 불안해하기 때문에 이렇게 합니다.괜찮으면 안 해도 돼.
    % mkdir -p ~/etc/letsencrypt
    % cp /etc/letsencrypt/cli.ini ~/etc/letsencrypt
    % mkdir -p ~/var/lib/letsencrypt
    % mkdir -p ~/var/log/letsencrypt
    
    다음은 PowerShell의 프로필$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1에서certbot을 사용하는 설정에 대한 설명입니다.
    # certbot では Windows ファイルシステムのパスを指定することはないが、
    # 共通で使用しているので書いておく
    function Convert-Windows-Path-To-WSL {
    	$args | % {
    		if ($_ -is [string]) {
    			# C ドライブ以外も必要であれば追記する
    			return $_.Replace('\', '/').Replace('C:/', '/mnt/c/')
    		} else {
    			return $_
    		}
    	}
    }
    
    # バージョンやヘルプを見るための alias
    function certbot {
    	wsl certbot $(Convert-Windows-Path-To-WSL @args)
    }
    
    # certbot-create domain.example.com を実行するだけでいいがにしてくれる
    function certbot-create {
    	[CmdletBinding()]
    	param (
    		[string]$domain
    	)
    
    	wsl certbot certonly `
    	  --manual `
    	  --domain $domain `
    	  --preferred-challenges dns `
    	  --work-dir ~/var/lib/letsencrypt `
    	  --logs-dir ~/var/log/letsencrypt `
    	  --config-dir ~/etc/letsencrypt
    
    	# できあがった証明書を Windows ファイルシステムにコピーする。
    	# 書きやすいので fd を使ったが、なければ find を使う
    	wsl fd $domain ~/etc/letsencrypt/live `
    	  --type d `
    	  --exec cp -RL '{}' /mnt/c/Server/certs/
    }
    

    좋은 웹페이지 즐겨찾기