간마늘작업소

[Ubuntu NAS] 06.Apache2에 무료 SSL 인증서 적용 (Feat.LattePanda, Let's Encrypt) 본문

작업물/LattePanda NAS

[Ubuntu NAS] 06.Apache2에 무료 SSL 인증서 적용 (Feat.LattePanda, Let's Encrypt)

간마늘 2020. 8. 11. 01:11

Nextcloud의 설정에 들어가서 관리 -> 개요 탭에 들어가면 보안 및 설치 경고 내역을 볼 수 있습니다.

 

노란색 글씨는 경고, 검정색 글씨는 권고 사항입니다.

 

결국 보안 문제인데 상단 주소표시줄을 보면 보안 접속이 안되고 있음을 알 수 있습니다. http로 접속을 하고 있다는 의미죠.

 

이를 해결 하기 위해서는 SSL 인증서를 발급받아서 적용해줘야 합니다. SSL 인증서는 유료가 대부분이지만 무료 도메인을 발급받는 것처럼 무료 인증서 역시 존재합니다. 저는 그 중 Let's Encrypt를 사용할까 합니다. 이 친구도 3개월마다 갱신해야 합니다.

 

sudo apt-get install git
sudo git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt/

먼저 설치를 해주고 디렉토리로 들어갑니다.

 

sudo ./letsencrypt-auto certonly --manual --email [이메일 주소] -d [도메인 주소]

이메일 주소와 도메인 주소를 정확하게 입력합니다. 이메일 주소는 3개월 뒤에 갱신하라고 메일을 보내준다고 합니다.

 

예를 들어서 이메일 주소가 test@test.com이고 도메인 주소가 maver.kro.kr이라고 한다면....

sudo ./letsencrypt-auto certonly --manual --email test@test.com -d maver.kro.kr

이렇게 하시면 됩니다.

 

진행 도중 Agree 1회, Yes 2회를 요구합니다.

 

그 다음 Enter를 치는 부분이 나오는데.... 누르시면 안됩니다!!!!!!!!

 

해줘야할 것이 있기 때문입니다.

 

Create a file containing just this data:

fPj2HPT0CtRGUFzhDCo10zZMLLAlA-iBnq19Xp6HKig.2jI0m3Dltf95vZ_4jhoakoLevITJlXlqsfVpVyVYxFE

And make it available on your web server at this URL:

http://[도메인 주소]/.well-known/acme-challenge/fPj2HPT0CtRGUFzhDCo10zZMLLAlA-iBnq19Xp6HKig

Enter 입력을 하는 곳 위에 이러한 주소로 된 것을 기억해야 합니다. 메모장에 따로 저장합시다. 해당 내용은 랜덤으로 생성되므로 제가 적은건 제 것입니다. 그대로 나오지 않습니다.

 

그 상태로 놔둔 다음에 새로운 터미널을 열어줍니다.

 

sudo cd /var/www/html/nextcloud

sudo mkdir .well-known
sudo cd .well-known

sudo mkdir acme-challenge
sudo cd acme-challenge

sudo vi fPj2HPT0CtRGUFzhDCo10zZMLLAlA-iBnq19Xp6HKig

<내용 작성>
fPj2HPT0CtRGUFzhDCo10zZMLLAlA-iBnq19Xp6HKig.2jI0m3Dltf95vZ_4jhoakoLevITJlXlqsfVpVyVYxFE
---- 저장 ----

경로도 위에서 적힌대로 따라서 들어갑니다. 그리고 내용 역시 위에 적혀있는 것 그대로 작성하고 저장합니다.

 

즉, 기본 디렉토리인 /var/www/html/nextcloud로 이동한 다음, '.well-known' 디렉토리를 생성하고 또 그 안에 'acme-challenge' 디렉토리를 생성한 다음, 그 안에 'fPj2HPT0CtRGUFzhDCo10zZMLLAlA-iBnq19Xp6HKig'라는 파일을 만들어서 내용은 'fPj2HPT0CtRGUFzhDCo10zZMLLAlA-iBnq19Xp6HKig.2jI0m3Dltf95vZ_4jhoakoLevITJlXlqsfVpVyVYxFE'라고 기입하는 것입니다.

 

다시 말씀드립니다만, 제가 지금 밑줄친 부분들은 랜덤으로 생성되는거라 어디까지나 예제입니다. 여러분께서 하실 때 생성된 값들로 치환하셔서 진행하셔야 합니다.

 

생성이 다 끝났다면 해당 터미널은 종료하고 다시 Enter를 눌러야하는 터미널로 돌아와서 Enter를 눌러줍니다.

 

sudo cd /etc/letsencrypt/live/[도메인 주소]
sudo ls -l

전부 끝나면 위와 같은 경로로 들어가서 pem 파일이 4개 생성되었음을 확인해야 합니다.

 

sudo cd /etc/apache2/sites-available
sudo cp default-ssl.conf nextcloud-ssl.conf

vi nextcloud-ssl.conf

<내용 전체 삭제 후 작성>
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin [이메일 주소]
        ServerName [도메인 주소]
        ServerAlias [도메인 주소]

        DocumentRoot /var/www/html/nextcloud

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLEngine on

        SSLCertificateFile  /etc/letsencrypt/live/[도메인 주소]/cert.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/[도메인 주소]/privkey.pem
        SSLCertificateChainFile /etc/letsencrypt/live/[도메인 주소]/chain.pem
        
        <FilesMatch "\.(cgi|shtml|phtml|php)$">
                SSLOptions +StdEnvVars
        </FilesMatch>
        <Directory /usr/lib/cgi-bin>
                SSLOptions +StdEnvVars
        </Directory>

        </VirtualHost>
</IfModule>
---- 저장 ----

vi nextcloud.conf

<내용 전체 삭제 후 작성>
<VirtualHost *:80>
     ServerName [도메인 주소]
     DocumentRoot /var/www/html/nextcloud
     Redirect permanent / https://[도메인 주소]/

     <Directory /var/www/html/nextcloud/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
     </Directory>
</VirtualHost>
---- 저장 ----

sudo a2enmod ssl
sudo a2ensite nextcloud-ssl.conf
sudo service apache2 restart

sudo ufw allow 443/tcp

다음은 도메인 등록을 해줍니다.

 

보안 접속은 TCP 443으로 이뤄집니다. 이에 대한 파일을 작성해야 합니다. 적절한 위치에 [도메인 주소]를 입력하면 됩니다.

 

그리고 TCP 80으로 들어오는 것들을 TCP 443으로 포워딩도 해줘야 합니다. 이에 따라서 파일을 수정합니다.

 

마지막으로 도메인 적용을 해주고 TCP 443을 방화벽에서 개방해줍니다.

 

여기까지 진행되었다면 TCP 443 접속을 의미하는 자물쇠가 있을 것입니다. 이제 HSTS 활성화와 메모리 캐시만 구성하면 됩니다.

Comments