실제 서비스되는 환경과 동일한 환경에서 웹을 테스트하려면 웹서버를 https로 띄워야 하는데
도메인이 없는 윈도우 테스트 PC에서 localhost 도메인을 https로 띄우는 방법에 대한 설명이다.
1. mkcert 설치
https://github.com/FiloSottile/mkcert#windows
윈도우에서 mkcert를 설치하려면 choco 로 설치하라는데
choco부터 설치해야한다
1-1. choco 설치
( https://nodejs.org/ko 에서 Node.js 윈도우 버전을 깐적이 있으면
choco가 이미 PC에 설치되어 있을수도 있다. 아래 과정의 choco 설치가 귀찮으면
Node.js 윈도우버전을 깔면 추가설치과정에서 자동으로 깔아주니 참고)
powershell을 관리자 권한으로 실행한뒤
1-1-1. choco가 이미 깔려있는 경우
# choco 가 깔려있는지 확인 PS C:\apm\certs> choco Chocolatey v0.10.15 Please run 'choco -?' or 'choco <command> -?' for help menu. # 깔려있을경우 choco 업데이트 PS C:\apm\certs> choco upgrade chocolatey Chocolatey v0.10.15 Upgrading the following packages: chocolatey By upgrading you accept licenses for the packages. You have chocolatey v0.10.15 installed. Version 2.0.0 is available based on your source(s). Progress: Downloading chocolatey 2.0.0... 100% chocolatey v2.0.0 chocolatey package files upgrade completed. Performing other installation steps. The package chocolatey wants to run 'chocolateyInstall.ps1'. Note: If you don't run this script, the installation will fail. Note: To confirm automatically next time, use '-y' or consider: choco feature enable -n allowGlobalConfirmation Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint): y PS C:\apm\certs> choco Chocolatey v2.0.0 Please run 'choco -?' or 'choco <command> -?' for help menu.
1-1-2. choco 가 없을 경우 신규설치
PS C:\apm> Set-ExecutionPolicy Bypass -Scope Process 실행 규칙 변경 실행 정책은 신뢰하지 않는 스크립트로부터 사용자를 보호합니다. 실행 정책을 변경하면 about_Execution_Policies 도움말 항목(https://go.microsoft.com/fwlink/?LinkID=135170)에 설명된 보안 위험에 노출될 수 있습니다. 실행 정책을 변경하시겠습니까? [Y] 예(Y) [A] 모두 예(A) [N] 아니요(N) [L] 모두 아니요(L) [S] 일시 중단(S) [?] 도움말 (기본값은 "N"): Y PS C:\apm> [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) PS C:\apm> choco Chocolatey v2.0.0 Please run 'choco -?' or 'choco <command> -?' for help menu.
1-2. mkcert 설치
마찬가지로 관리자권한으로 실행된 powershell에서
PS C:\apm> choco install mkcert Chocolatey v2.0.0 Installing the following packages: mkcert By installing, you accept licenses for the packages. Progress: Downloading mkcert 1.4.4... 100% mkcert v1.4.4 [Approved] mkcert package files install completed. Performing other installation steps. ShimGen has successfully created a shim for mkcert.exe The install of mkcert was successful. Software installed to 'C:\ProgramData\chocolatey\lib\mkcert' Chocolatey installed 1/1 packages. See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log). PS C:\apm>
1-3. mkcert를 이용해 CA로 부터 루트 인증서 설치 (바이러스같은 안랩이 방해하니 안랩을 끄거나 삭제후에 하자)
PS C:\apm> mkcert -install Created a new local CA The local CA is now installed in the system trust store The local CA is now installed in Java's trust store PS C:\apm>
1-4 로컬주소에 대한 인증서 생성
PS C:\apm> mkcert localhost 127.0.0.1 ::1 Created a new certificate valid for the following names - "localhost" - "127.0.0.1" - "::1" The certificate is at "./localhost+2.pem" and the key at "./localhost+2-key.pem" It will expire on 20 September 2025 PS C:\apm> dir 디렉터리: C:\apm Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2023-06-20 오후 7:45 1704 localhost+2-key.pem -a---- 2023-06-20 오후 7:45 1610 localhost+2.pem PS C:\apm>
유효기간보면 2년 3개월짜리 인증서다.
2. 윈도우 아파치 설정 (아파치 현재버전인 2.4버전 기준)
1에서 생성한 키와 인증서파일을
C:\apm\certs 처럼 certs 디렉토리를 만든후 아래에 카피해주고 착오방지를 위해
localhost+2-key.pem 은 localhost-key.pem 로
localhost+2.pem 은 localhost-cert.pem 으로 이름을 바꿔준다. 파일이름에 +가 들어가는것도 막을겸.
2.1 아파치가 설치된 디렉토리내
conf/httpd.conf 파일을 열어
mod_socache_shmcb.so 와 mod_ssl.so 와 httpd-ssl.conf 를 검색해 주석 3군데를 풀어준다
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so #LoadModule speling_module modules/mod_speling.so LoadModule ssl_module modules/mod_ssl.so # ... Include conf/extra/httpd-ssl.conf
2.2 conf/extra/httpd-ssl.conf를 열어
아래처럼 DocumentRoot, ServerName, SSLCertificateFile, SSLCertificateKeyFile 값을
자신의 환경에 맞춰 바꿔준다.
<VirtualHost _default_:443> # General setup for the virtual host #DocumentRoot "${SRVROOT}/htdocs" DocumentRoot "E:/auto" ServerName localhost:443 #... #SSLCertificateFile "${SRVROOT}/conf/server.crt" SSLCertificateFile "c:/apm/certs/localhost-cert.pem" #... #SSLCertificateKeyFile "${SRVROOT}/conf/server.key" SSLCertificateKeyFile "c:/apm/certs/localhost-key.pem"
이제 Win+R -> services.msc 서비스 관리창 띄워서
아파치 서비스 중지->시작으로 재시작하면
https://localhost 로 접속이 가능해진다.
아파치 서비스 재시작시 오류가 나면 이벤트 뷰어 -> 응용프로그램 부분에 가면 실패원인에 대한 메시지가 나오니 참고.
(https(443)포트를 다른 서버 (iis나 vmware server 등)가 이미 점유하고 있으면 서비스를 시작할수가 없다. 그 이외에는 아파치설정오류)
크롬으로 확인했을때
크롬에서 인증서 뷰어
2.3 http로 접속하면 자동으로 https접속으로 리다이렉트 시키기
conf/httpd.conf 를 열어 mod_rewrite.so 로 검색해 주석처리되어 있으면 없애주고
ServerName 바로아래에 rewrite rule 3줄 추가해준다.
여러 도메인 테스트 중이라면 extra/httpd-vhosts.conf 의 virtualhost 부분의 ServerName 아래에 넣어준다
LoadModule rewrite_module modules/mod_rewrite.so #... ServerName localhost:80 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]