윈도우용 아파치에서 localhost 를 https로 띄우기

by DDART posted Jun 21, 2023
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

실제 서비스되는 환경과 동일한 환경에서 웹을 테스트하려면 웹서버를 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 등)가 이미 점유하고 있으면 서비스를 시작할수가 없다. 그 이외에는 아파치설정오류)

 

 

크롬으로 확인했을때 

크롬_HTTPS정보.gif
 

크롬에서 인증서 뷰어

 

크롬인증서정보.gif

 

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]