본문으로 바로가기
반응형

 

1. Win-acme를 이용하여 let's encrypt 3개월짜리 무료 SSL 발급

2. 윈도우 nginx virtual.conf 에 개별 서브도메인에 ssl 적용하기 (참고.https://ahribori.com/article/5a2032f5014bc70f303f77b4)

3. http를 https로 리다이렉팅하기 (참고.https://blog.dalso.org/home-server/webserver/5853)

 

1. win-acme 로 ssl인증서 발급받기

https://github.com/win-acme/win-acme/releases/

 

Releases · win-acme/win-acme

A simple ACME client for Windows (for use with Let's Encrypt et al.) - win-acme/win-acme

github.com

현재(2020.10.22) 기준 2.1.11  이며 현재 윈도우64비트라서

win-acme.v2.1.11.917.x64.pluggable.zipgithub.com/win-acme/win-acme/releases/download/v2.1.11/win-acme.v2.1.11.917.x64.pluggable.zip

 

버전을 받았다. 

압축을 풀고 wacs.exe를 실행 (관리자가 아니면 관리자권한으로실행)

 

 

풀옵션인 M 을 선택하여 진행한다.

2번 Manual input을 선택하여, 적용할 호스트네임. 즉 운영중인 도메인을 입력한다. 

나는 각 사용자별 각각의 서브도메인을 사용중이라서 하나만 입력하고 만든다. 여러개를 포함하는 인증서 생성을 원하면 콤마(,)로 구분해서 적어주면된다. 나는 이용하는 사용자마다 계정이 다 달라서 개별로 만들어주었다.

여기서, 여러개 테스트 해보았는데, FTP로 verify(인증)받는게 에러없이 제일 편했다. verifying이 되어야 인증서 pem이 만들어진다.

윈도우이기에 FTP는 파일질라등 간단한 걸로, 각 사용자가 자기 웹서버폴더에 접근할 수 있도록 구축해 놓았을 것이다.

그 FTP 주소 및 포트, 그리고 접속 아이디 / 패스가 필요하다.

FTP주소를 입력한다.

예시와 같이 포트를 포함하여 , 접속시 루트위치까지 /를 넣고 입력하면된다. 

validation을 위해 web.config를 복사하겠냐는데 그냥 No하면된다.

그리고 Username과 password에는 ftp 계정정보대로 입력한다.

 

도메인 소유가 증명되면, 인증서를 생성할 것이라고 한다. 원하는 타입을 선택하라고 한다.

2번 RSA Key를 선택.

어느 용도의 인증서를 발급 받고자 하는지 선택한다.

Nginx용이므로 2번 PEM을 선택한다.

그리고 저장할 위치 선택. 미리 C:\ssl 폴더를 만들어두었고, 위치를 적어주었다.

또 다른 방법으로 인증서 저장할래? 라는 질문이다. 더이상 안할 것이므로 5번 No.

 

그리고 추가적으로 새로 만들것 없으므로 4번선택.

이제 도메인에 대한 인증을 FTP설정을 통해 하게 되며, Valid로 결과가 나온다.

만약 FTP정보가 틀렸거나 하면, 인증서 생성 실패(failed)가 나오며, retry (재시도)하겠냐고 하니, 트리면 창 닫고 첨부터 다시해야한다(이전단계로 가기가 없다 ㅠㅠ)

 

다음으로 인증서 갱신스케줄만들기(renewal) 인가 하는 부분이 있는데 화면에서 잘린듯.. 

아무튼 마치고 나면 아래와 같이 첫화면이 나온다.

이제 끝이다. Q를 눌러서 마친다.

R은 스케쥴에 등록된 리뉴얼작업 내역보는거, A는 관리.. 나는 현재 2개의 도메인에 대해 ssl인증서를 만들었다. 

그래서 화면과 같이 2 total로 나온다.

 

3개월짜리 이므로 오늘 날짜 10.22 기준으로 2021.01.21 일까지로 나온다.

미리 적용된 화면을 보자.

 

2. nginx 에 ssl설정하기

먼저 생성된 파일을 서버컴퓨터에 복사해준다.

인증서 갱신 스케줄을 해놨으니, 만약 갱신이 되면, 해당 파일을 교체해주면 될 것같다. 아니면 재발급..

아래 처럼 발급된 인증서파일이 4개가 있는데 이중에서 2개만 필요하다.

도메인-chain.pem

도메인-key.pem 

 

이 2개의 파일을 서버컴퓨터의 원하는 위치(나는 C:\ngxmp\ssl 폴더)에 두었다.

나는 여러개의 도메인을 운영하고 있어서 메인파일인 nginx.conf에 virtual.conf 를 include로 호출하고있다.(토토루님 ngxmp 사용중)

그래서 virtual.conf 파일에서 각 도메인별 ssl접속을 위한 server 섹션을 추가로 만들고, 아래 부분을 추가해주었다.

 

사용중인 내용은 다음과 같다.

 

server {
		listen 443 ssl http2;
		server_name  도메인;
		ssl on;
		ssl_certificate C:\NGXMP\SSL\도메인-chain.pem;
		ssl_certificate_key C:\NGXMP\SSL\도메인-key.pem;
		ssl_session_timeout 5m;
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		ssl_ciphers  ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:HIGH:MEDIUM:!MD5:!aNULL:!EDH:!RC4:!DSS;
		ssl_prefer_server_ciphers on;
		ssl_session_cache shared:SSL:10m;

		root F:/www/계정폴더;
		

		# php 설정
		location ~ \.php$ {
			# 해킹될수가있어 try_files $uri =404; 추가함
			try_files $uri =404;
			fastcgi_pass 127.0.0.1:9000;
			fastcgi_connect_timeout 300s;
			fastcgi_send_timeout 300s;
			fastcgi_read_timeout 300s;
			fastcgi_buffer_size 128k;
			fastcgi_buffers 8 128k;
			fastcgi_busy_buffers_size 256k;
			fastcgi_temp_file_write_size 256k;
			fastcgi_index index.php;
			fastcgi_intercept_errors on;
			fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
			fastcgi_param HTTPS on;
			include fastcgi_params;
			#limit_req zone=phpddos burst=2;
		}
	}

https://ahribori.com/article/5a2032f5014bc70f303f77b4

도 참고해서 보시도록.

 

3. http주소를 https로 리다이렉팅하기

위까지만 하면 https://도메인 으로 접속시, 보안 문제가 뜨지 않는 정상적인 ssl인증서를 가진 사이트 접속이 된다.

하지만, 사용자가 http로 접속시 https로 전환되도록 해주는게 좋다.

 

xe 홈페이지라서 rewrite.conf에 어떤 설정을 하라는 방법도 있었지만, xe뿐 아니라 동일하게 적용되는 방법으로 nginx설정에 아래와 같이 해주는게 좋다. 

 

virtual.conf의 http기본 server 섹션에 추가해주었다.

 

 

해당 도메인 서버 섹션에 추가할 내용

location / {
        return 301 https://도메인$request_uri; ## HTTPS로 리다이렉팅
        }

도메인 부분만 본인에 맞게 수정.

 

설정이 끝났으면 이제 nginx를 재시작 해준다.

nginx재시작이 제대로 안되면, conf 파일에 문제가 있으므로 살펴보기 바란다.

문제 확인은 

cmd 에서 nginx.exe를 실행해보면 오류 구문 라인이 뜨니 확인.

반응형