Skip to content

apache 설정과 ssl인증서 설정

Kenneth Jung edited this page Apr 3, 2022 · 7 revisions

1. Certbot 설치

sudo apt-get update
sudo apt-get install certbot python3-certbot-apache net-tools

2. Apache 인증서 적용 전 사전설정

위 두개글을 참고하여 사전 도메인설정이 되어있어야합니다.

3. 방화벽 허용

HTTPS 트래픽을 허용하기 위해서 'Apache Full'을 허용하고 중복된 'Apache'를 삭제합니다.

sudo ufw allow 'Apache Full'
sudo ufw delete allow 'Apache'

위와 같이 했을때 아래의 명령어를 입력하여 다음과 같은 결과가 보여지면 설정 성공입니다.

sudo ufw status
Output
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Apache Full                ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Apache Full (v6)           ALLOW       Anywhere (v6)        

4. 무료 DNS 받아 ip 설정하기

image 위와 같이 AWS의 ip 주소를 설정하여 DNS가 잘 동작하도록 설정합니다.

우리는 freenom이라는 곳에서 무료 DNS를 받아왔습니다.

잘 작동하는지 dnschecker이라는 곳에서 DNS를 검색하여 체크합니다. image

5. apache 추가 모드 설치

sudo a2enmod proxy_http
sudo a2enmod ssl

아파치의 프록시와 인증서 사용을 위해 위 두개의 모드를 설치합니다.

sudo systemctl restart apache2

위 명령어를 통해 apache를 재실행 합니다.

6. SSL 인증서 받아오기

Certbot은 플러그인을 통해 SSL 인증서를 얻는 다양한 방법을 제공합니다.

Apache 플러그인은 Apache 재구성을 처리하고 필요할 때마다 구성을 다시 로드합니다. 이 플러그인을 사용하려면 다음을 입력하십시오.

sudo certbot --apache

뭔가 질문이 많이 나오는데 요약하면 다음과 같습니다. ( 변경될 수 있으므로 읽어보고 확인하길 바랍니다.)

  1. 이메일을 적어라
  2. 이메일등록 -> 무조건 동의한다고 해야함
  3. 이메일 광고성 수신 -> 거절 가능
  4. 도메인 입력 (이미 설정했다면 내용없이 엔터만 입력해서 두개 다 자동등록 가능)
  5. 리다이렉트 설정 여부 -> 2번 눌러 사용하도록 설정하자! (여기서 에러가 난다면 이미 등록되어있다는 뜻이다. 무시해도된다.)

아래 명령어를 통해 인증서가 언제 활성화 되었는지, 언제 만료되는지 알 수 있다.

sudo systemctl status certbot.timer

7. openssl을 이용하여 키 생성하고 Spring Boot로 build하기.

7.1. 키 생성

키가 생성된 폴더로 이동합니다. ( /etc/letsencrypt/live/film17.ga 위치에 있습니다.)

아래의 명령어를 이용해 keystore.p12 를 생성합니다.

sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name airpageserver -CAfile chain.pem -caname root

7.2. 키를 포함하여 build하기

키를 소스코드 프로젝트의 resources 디렉토리 하위에 저장합니다. (우리 프로젝트는 film-domain 에 저장되어야 합니다.)

키는 절대 git에 업로드하면 안됨!!!!!

yaml 파일에 아래와 같이 내용을 추가합니다.

server:
  port: 8080
  ssl:
    key-store: classpath:keystore.p12
    key-store-type: PKCS12
    key-store-password:
    enabled: true

Gradle을 이용해 bootJar를 하여 jar 파일을 제작하고 실행하면 됩니다.

(우리 프로젝트는 film-api 에서 build를 해야하고 결과 파일은 build-libs 에 있습니다. plain 붙어있는거 아님 주의)

*. 참고자료

https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-20-04