AWS EC2 HTTPS
๐ก Things I learned
โ๏ธ Shell
์ปค๋๊ณผ ์ฌ์ฉ์ ๊ฐ์ ๋ค๋ฆฌ ์ญํ ์ ํ๋ ์ธํฐํ์ด์ค
์ฌ์ฉ์๋ก๋ถํฐ ๋ช ๋ น์ ๋ฐ์ ์คํํ๋ ์ญํ
โ๏ธ SSH
Secure SHell
์๊ฒฉ ์ปดํจํฐ์ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ณด์ ํ๋ก๊ทธ๋จ
๐๐ป ๊ฐ๋ ฅํ ์ํธํ ๊ธฐ๋ฅ์ ๊ตฌํํด ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ํธํ๋์ด ๋์ ๋ณด์์ ์ง์ํ๋ค๋ ์ฅ์
์ํธํ๋ฅผ ํด ์ค์ ๋ณด์์ ์์ ํ๋ค๋ ์ฅ์
์ธ์ฆํค, ํค ํ์ด(.pem
)๊ฐ์ ๊ฒ๋ค์ด ๋ฐ๋ก SSH
๋ผ๋ ๋ณด์ ๋ฐฉ์์ด ์ ์ฉ๋ ์๋ฒ์์ ํ์ํ ํ์ผ
๐ ์๋ ์๋ฆฌ: KEY
SSH ์๋์๋ฆฌ์ ๊ฐ์ฅ ํต์ฌ์ ๋ฐ๋ก KEY
โ๏ธ ๋น๋์นญํค ๋ฐฉ์ ์ฌ์ฉ์์ ์๋ฒ๊ฐ ์๋ก์ ์ ์ฒด๋ฅผ ์ฆ๋ช
(์ธ์ฆ)ํ๊ธฐ ์ํด ๋น๋์นญํค๊ฐ ํ์ํ๋ค.
๋น๋์นญํค ํค ํ์ด = ๊ณต๊ฐ ํค(.pub
) + ๊ฐ์ธ ํค(.pem
)
์ฌ์ฉ์๊ฐ ํค ํ์ด๋ฅผ ๋ง๋ค์ด ์๋ฒ์๊ฒ ๊ณต๊ฐํค๋ฅผ ์ฃผ๊ณ , ๊ฐ์ธ ํค๋ ์์ ์ด ๊ฐ์ง๊ณ ์๋๋ค.
์๋ฒ๋ ๊ณต๊ฐํค๋ฅผ ๋ฐ์
ํ ๊ฐ(์ํ์ง)๋ฅผ ์์ฑํ๋ค.
์ฌ์ฉ์๋ ์๋ฒ๋ก๋ถํฐ ์ํ์ง๋ฅผ ๋ฐ์ ์๊ธฐ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ธ ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์๋ผ์ง๋ฅผ ํผ๋ค.
ํค ํ์ด๋ ํ๋์ ์ธํธ์ด๊ธฐ ๋๋ฌธ์, ๊ณต๊ฐํค์ ๊ฐ์ธํค๊ฐ ๊ฐ์ ํคํ์ด์ผ์ง๋ง ์ด ์ํ์ง๋ฅผ ์ถ ์ ์๋ค.
์๋ฒ๋ ์ฌ์ฉ์๊ฐ ํผ ์ํ์ง๋ฅผ ์ฒ์์ ์์ ์ด ์์ฑํ ๊ฐ๊ณผ ๋น๊ตํ๊ณ , ๋ ๊ฐ์ด ๊ฐ์ผ๋ฉด ์ ์ ํ์ฉ!
โ๏ธ ๋์นญํค ๋ฐฉ์
์ด์ ์ฌ์ฉ์์ ์๋ฒ๊ฐ ์๋ก๊ฐ ๋๊ตฌ์ธ์ง ์์์ผ๋ ์ ๋ณด ์ฃผ๊ณ ๋ฐ์
์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์ ์ ๋ณด๊ฐ ์์ด๋๊ฐ์ง ์๊ฒ ์ ๋ณด๋ฅผ ์ํธํ
์ด ๋ ์ฌ์ฉ๋๋ ์ํธํ ํค๊ฐ ๋ฐ๋ก ๋์นญํค ๋ฐฉ์
์๋ฒ์ ์ฌ์ฉ์ ๋ชจ๋ ํ ๊ฐ์ ํค๋ง์ ์ฌ์ฉํ์ฌ ์ํธํ
โ๏ธ EC2
Amazon Elastic Compute Cloud
AWS์์ ์๊ฒฉ์ผ๋ก ์ ์ดํ ์ ์๋ ๊ฐ์์ ์ปดํจํฐ๋ฅผ ๋น๋ฆฌ๋ ๊ฒ(ํด๋ผ์ฐ๋ ์ปดํจํฐ)
ํ๋ถ์ ๋ก ์ฌ์ฉํ ๋งํผ ๋น์ฉ์ ์ง๋ถํ๊ธฐ์ Elastic
๋ ์ํ๋ ๋งํผ ์ฑ๋ฅ, ์ฉ๋์ ์์ ๋กญ๊ฒ ์ค์ ํ ์ ์์ด Elasticํ๊ธฐ๋ ํ๋ค.
โ๏ธ AMI
Amazon Machine Image
master image for the creation of vertual servers(known as EC2)
machine images are like templates with OS(linux, ubuntu), region, system architecture(32 or 64bit) that determine the userโs operating environment
EC2 ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ template
โ๏ธ VPC
Amazon Virtual Private Cloud
๊ฐ์ ๋คํธ์ํน ํ๊ฒฝ
VPC์ EC2, RDS ์ธ์คํด์ค์ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ถ๊ฐํ๋ค.
VPC๋ฅผ ์ฌ์ฉํจ์ผ๋ก์ VPC๋ณ๋ก ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ ์ ์๊ณ , VPC๋ ๋ ๋ฆฝ์ฃ ๋คํธ์ํฌ์ฒ๋ผ ์๋
๋ค๋ฅธ VPC์ ํต์ ํ๊ธฐ ์ํด์๋ ์ธํฐ๋ท ๊ฒ์ดํธ์จ์ด ์ฌ์ฉ
โ๏ธ ์๋ธ๋ท
VPC์ IP ์ฃผ์ ๋ฒ์
VPC๋ฅผ ๋ ์๊ฒ ์ชผ๊ฐ ๋ค.
๊ทธ๋์ VPC๋ณด๋ค ์๋ธ๋ท ๋ง์คํฌ๊ฐ ๋ ๋๊ฒ ๋๊ณ , ์์ดํผ ๋ฒํธ๋ ๋ ์๊ฒ ๋๋ค.
์๋ธ๋ท์ ๋ง๋๋ ์ด์ ๋ ๋ ๋ง์ ๋คํธ์ํฌ ๋ง์ ๋ง๋ค๊ธฐ ์ํด์.
์๋ธ๋ท๋ผ๋ฆฌ๋ ๋ผ์ฐํฐ๋ฅผ ํตํด ํต์
์ ๋ฆฌํ์๋ฉด, AWS > VPC > ์๋ธ๋ท ์์ด๋ค.
โ๏ธ SSL์ธ์ฆ์๋?
Secure Sockets Layer
์๋ฒ์ ๋ํ ์ธ์ฆ, ๋ฐ์ดํฐ ์ํธํ ๊ธฐ๋ฐ ์ธํฐ๋ท ๋ณด์ ํ๋กํ ์ฝ
์ฌ์ฉ ํฌํธ: HTTPS์ ๊ฒฝ์ฐ HTTP๋ฅผ ์ํ SSL/TLS ๋ณด์ ํฐ๋ ํ์ฑ์ ์ํด 443 ํฌํธ ์ฌ์ฉ
SSL์ ์ฌ์ฉ์์ ์น ์๋ฒ ์ฌ์ด๋ฅผ ์ด๋ํ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํด์ ๋๊ฐ ๊ฐ๋ก์ฑ๋๋ผ๋ ๋ณผ ์ ์๋๋ก ํ๋ค.
์๋ฅผ ๋ค์ด, ์ผํ๋ชฐ์์ ์ ์ฉ์นด๋ ์ ๋ณด๋ฅผ ์
๋ ฅํ๋ฉด SSL๋ก ์ํธํ๋์ด ๋๊ตฐ๊ฐ๊ฐ ์ ๋ณด๋ฅผ ๊ฐ๋ก์ฑ๋ ๋ฌด์์ ๊ธ์๋ง ๋ณผ ์ ์์.
SSL์ ๋ ํต์ ์ฅ์น ์ฌ์ด์ ํธ๋์
ฐ์ดํฌ๋ผ๋ ์ธ์ฆ ํ๋ก์ธ์ค๋ฅผ ํ๋ค.
๊ทธ๋์ SSL์ ์ฌ์ฉํ๋ฉด, SSL์ธ์ฆ์๊ฐ ์๋ ์น์ฌ์ดํธ๋ง ์คํํ ์ ์๋ค.
SSL์ธ์ฆ์๋ ์ ๋ถ์ฆ๊ฐ์ ์ญํ ์ ํด์ ์น์ฌ์ดํธ ์ ์์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
SSL์ธ์ฆ์์๋ ์น ์ฌ์ดํธ์ ๊ณต๊ฐ ํค๊ฐ ํฌํจ๋์ด ์๋ค.
๊ทธ๋ฆฌ๊ณ ์น ์๋ฒ์๋ ๊ฐ์ธ ํค๊ฐ ์์ด ๊ณต๊ฐ ํค๋ฅผ ํด๋
ํ ์ ์์
CA๋ SSL์ธ์ฆ์ ๋ฐ๊ธ์ ๋ด๋นํ๋ค.
SSL์ธ์ฆ์ ๊ด๋ จ ํ๋ก์ธ์ค์๋ ๋ค์๊ณผ ๊ฐ์ ๋ณด์ ๊ธฐ์ ์ด ํ์ฌ๋์ด ์์
- ํ๋์ ํค๋ก ์ํธํ/๋ณตํธํ๋ฅผ ํ๋ ๋์นญ ์ํธํ ๋ฐฉ์
- ํ ์์ ํค ํ์ด๋ก ์ํธํ/๋ณตํธํ๋ฅผ ํ๋ ๋ฐ๋์นญ ์ํธํ ๋ฐฉ์
- authentication ์ ๋ถ ํ์ธ
- digital signature
- CA(certificate Authority)
ํธ๋์ ฐ์ดํฌ
ํต์ ์ ํ๋ ค๋ ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ๊ฐ ์๋ก ์ํธํ ํต์ ์ ์์ํ ์ ์๋๋ก ์ ๋ถ์ ํ์ธํ๊ณ , ํ์ํ ์ ๋ณด๋ฅผ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์ฃผ๊ฑฐ๋ ๋ฐ๊ฑฐ๋ ํ๋ ๊ณผ์
๐ก ์ฐธ๊ณ https://brunch.co.kr/@sangjinkang/38 https://aws-hyoh.tistory.com/39
โ๏ธ TLS
Transport Layer Security
SSL๋ณด๋ค ์ ๋ฐ์ดํธ ๋ ์ํธํ ํ๋กํ ์ฝ
โ๏ธ TCP ํ๋กํ ์ฝ
Transmission Control Protocol
์ธํฐ๋ท ์ฝํ ์ธ ๋ฅผ ์ ๋ฌํ๋ ํ๋กํ ์ฝ
๋ ๊ฐ์ ํธ์คํธ๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ฐ์ดํฐ ์คํธ๋ฆผ ๊ตํํ๊ฒ ํด ์ค
HTTP๋ TCP ํ๋กํ ์ฝ์ ์ผ์ข ์ด๋ค.
โ๏ธ FTP ํ๋กํ ์ฝ
File Trasnfer Protocol
โ๏ธ SFTP ํ๋กํ ์ฝ
SSH ํ์ผ ์ ์ก ํ๋กํ ์ฝ
๋ณด์์ ์ํด ์ฌ์ฉ๋๋ ํ์ผ ์ ์ก ํ๋กํ ์ฝ
โ๏ธ HTTP ๐ HTTPS
HTTPS: Hypertext Transfer Over SSL
SSL์์ HTTP ์ ์ฉ, ๋ฐ๋ผ์ SSL์ ์ ์ฉํ ๋๋ฉ์ธ๋ง์ดhttps://
์ฃผ์๋ฅผ ๊ฐ์ง ์ ์๋ค.
HTTP ํฌํธ๋ฒํธ๋ ์ผ๋ฐ์ ์ผ๋ก 80๋ฒ์ ์ฌ์ฉํ๋ค๋ฉด, HTTPS๋ 443์ด ํ ๋น๋์ด ์๋ค.
โ๏ธ HTTP โถ๏ธ HTTPS ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ
๐ ๏ธ Letโs Encrypt
๋ฌด๋ฃ๋ก TLS/SSL์ธ์ฆ์๋ฅผ ์ฝ๊ฒ ๊ฐ์ ธ์ค๊ณ ์ค์นํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ CA(์ธ์ฆ ๊ธฐ๊ด)
๋ฌด๋ฃ์ SSL์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ์น ์๋ฒ์์ ์ํธํ๋ HTTPS๋ฅผ ์ฌ์ฉํ ์ ์์
Certbot๋ผ๋ ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ๊ตฌํํ ์ ์๊ฒ ํฉ๋๋ค.
90์ผ๋์ ์ฌ์ฉ๊ฐ๋ฅํ์ง๋ง ๊ฐ๋จํ ๋ช ๋ น์ด๋ก ์๋๊ฐฑ์ ๊ฐ๋ฅ
โ๏ธ Letโs Encrypt SSL ์ธ์ฆ์ ๋ฐ๊ธ ๋ฐฉ๋ฒ
โญ๏ธ Nginx
- ์ธ์ฆ ๋ฐ ์ค์น๋ฅผ ์ํด nginx ํ๋ฌ๊ทธ์ธ ์ฌ์ฉ
โญ๏ธ standalone
- ์น ์๋ฒ ๋์์ ๋ฉ์ถ๊ณ ์ด ์ฌ์ดํธ์ ๋คํธ์ํน์ ํตํด ์ฌ์ดํธ ์ ํจ์ฑ ํ์ธ ํ SSL์ธ์ฆ์ ๋ฐ๊ธ
- 80ํฌํธ๋ก ๊ฐ์ standalone ์น์๋ฒ๋ฅผ ๋์ ์ธ์ฆ์ ๋ฐ๊ธ
- ๋์์ ์ฌ๋ฌ ๋๋ฉ์ธ ๋ฐ๊ธ ๊ฐ๋ฅ
- ์๋๊ฐฑ์ ๊ฐ๋ฅ
โญ๏ธ webroot
- ์ฌ์ดํธ ๋๋ ํ ๋ฆฌ ๋ด์ ์ธ์ฆ์ ์ ํจ์ฑ์ ํ์ธํ ์ ์๋ ํ์ผ์ ์ ๋ก๋ํ์ฌ ์ธ์ฆ์ ๋ฐ๊ธ
- ์๋ฒ ์ค๋จ ์์ด ์ธ์ฆ์ ๋ฐ๊ธ ๊ฐ๋ฅ
- ์ธ์ฆ ๋ช ๋ น์ ํ๋์ ๋๋ฉ์ธ ์ธ์ฆ์๋ง ๋ฐ๊ธ ๊ฐ๋ฅ
- ์๋๊ฐฑ์ ๊ฐ๋ฅ
โญ๏ธ DNS
- ๋๋ฉ์ธ์ ์ฟผ๋ฆฌํด ํ์ธ๋๋ TXT๋ ์ฝ๋๋ก ์ฌ์ดํธ ์ ํจ์ฑ ํ์ธ
- ์์ผ๋ ์นด๋ ๋ฐฉ์
- ์๋ฒ ๊ด๋ฆฌ์๊ฐ ๋๋ฉ์ธ DNS๋ฅผ ๊ด๋ฆฌ, ์์ ํ ์ ์์ด์ผ ํจ
- ์ธ์ฆ์ ๊ฐฑ์ ํ ๋๋ง๋ค DNS์์ TXT๊ฐ ๋ณ๊ฒฝ ํ์
โ ๊ฐ๋น์์์ ๋๋ฉ์ธ ๊ตฌ๋งคํ๊ธฐ
โ๏ธ ๊ตฌ๋งคํ๊ธฐ
โ AWS Route 53
โ๏ธ ํธ์คํ ์์ญ ์์ฑ
- ๋๋ฉ์ธ ์ด๋ฆ: ๊ฐ๋น์์์ ๊ตฌ๋งคํ ๋๋ฉ์ธ ์ด๋ฆ ์ ๋ ฅ
โ๏ธ ๋ ์ฝ๋ ์ธํธ ์์ฑ
- EC2 IP์ฐ๊ฒฐ ๊ฐ: EC2 Public IP๊ฐ ์ ๋ ฅ
โ๏ธ ๋ค์์๋ฒ ์ค์
๊ฐ๋น์์์ ๋ค์์๋ฒ ์ค์ ํด์ผ ํจ
NS์ ํ์ ๋ ์ฝ๋ 4๊ฐ์ง์ ๊ฐ(ns-000)์ ๋ฑ๋กํ๋ค.
.
์ ์๋ตํ๊ณ ๋ฑ๋ก
โ SSL ์ธ์ฆ์ ๋ฐ๊ธ Letโs Encrypt
โ๏ธ SSH๋ก EC2์ธ์คํด์ค์ ์ ์ํด certbot์ค์น
์
๋ฐ์ดํธ
1
2
3
sudo apt update
sudo apt upgrade
sudo add-apt-repository ppa:certbot/certbot
โ๏ธ Certbot์ Nginx ํจํค์ง ์ค์น
1
sudo apt install -y certbot python3-certbot-nginx
โ๏ธ Nginx Configuration ์ค์ (๐บ ๊ฑด๋๋ฐ๊ธฐ)
server_name์ ๊ตฌ๋งคํ ๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
1
sudo vim /etc/nginx/sites-available/default
๋๋ฉ์ธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พผ ๋ค ์ ๋๋์ง ํ ์คํธ
1
sudo nginx -t
โ๏ธ Nginx reload (๐บ ๊ฑด๋๋ฐ๊ธฐ)
1
sudo systemctl reload nginx
โ๏ธ HTTPS์ ๋ํ ๋ฐฉํ๋ฒฝ ํ์ฉ ์ค์
AWS EC2์ธ์คํด์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฉํ๋ฒฝ์ด ๋นํ์ฑํ๋์ด ์๋ค๊ณ ํ๋ค.
1
sudo ufw status
โ๏ธ SSL ์ธ์ฆ์ ๋ฐ๊ธฐ
์ํ๋ ๋๋ฉ์ธ์ ์ง์ ํด์ Nginx ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ธ์ฆ์ ํ๋
1
2
3
4
sudo certbot --nginx -d ๋๋ฉ์ธ
์ด๋ฉ์ผ ์
๋ ฅ
## Let's Encrypt ์ด๋ฉ์ผ์ ์ถ๊ฐ๋๊ณ ์ถ์์ง ์๋์ง ์ ํ
## ๊ธฐ์กด HTTP ์ฐ๊ฒฐ ์์ฒญ์ HTTPS๋ก ์๋์ผ๋ก ๋ฐ๊ฟ์ค ๊ฒ์ธ์ง ์ ํ
certbot
: ์ธ์ฆ์๋ฅผ ๋ค์ด๋ฐ๊ณ ์ค์นํ๋ ๋ช
๋ น์ด
--nginx
: ํด๋น ๋๋ฉ์ธ์ ๋ํ ์์ ์ฃผ๊ฐ ์์ ์์ ์ธ์ฆํ๊ธฐ ์ํด ์ด์ฉํ ํ๋ฌ๊ทธ์ธ
๋๋ฉ์ธ ๊ด๋ฆฌ์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์
๋ ฅํ๋ผ๊ณ ํจ(๋ง๋ฃ์ผ์ ๋ํ ์ ๋ณด ๋ฉ์ผ๋ก ์ ์กํด ์ค)
์ฝ๊ด์ ๋ํ ๋์ (A)/(C) ๋ฅผ ๋ฌป๋๋ฐ ๋์์ ์ ํํ๋ (A)
โ๏ธ key ์ ๋ฐ๊ธ๋์๋์ง ํ์ธ
4๊ฐ์ .pem, 1๊ฐ์ readme๊ฐ ์์ฑ๋์๋์ง ํ์ธ
์ด ํ์ผ๋ค์ /etc/letsencrypt/live/[๋๋ฉ์ธ์ฃผ์]
์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ด๋ค.
1
2
## ll /etc/letsencrypt/live/ ๋ด ๋๋ฉ์ธ
ls -al /etc/letsencrypt/live/drugstoreproject.shop
โ๏ธ ๋๋ฉ์ธ ์๋ฒ ํ ์คํธ
๋๋ฉ์ธ์ ์
๋ ฅํ๊ณ submit
https://www.ssllabs.com/ssltest/
โก๏ธ Nginx ์ค์ ์ผ๋ก ๊ฐ๊ธฐ
โ๏ธ Certbot ์๋๊ฐฑ์
- Letโs Encrypt์ ์ธ์ฆ์๋ 90์ผ๋์๋ง ์ ํจํด์ 90์ผ๋ง๋ค ๊ฐฑ์ ํด์ฃผ์ด์ผ ํ๋ค.
- ์ค์นํ๋ ๊ณผ์ ์์
/etc/cron.d
์ ์๋์ผ๋ก ๊ฐฑ์ ์์ผ์ฃผ๋ ๋ช ๋ น์ด๊ฐ ์ถ๊ฐ๋์ด ์์๋ค! - ๊ฐฑ์ ํ๋ก์ธ์ค๊ฐ ์ ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ณ , ์ค๋ฅ๊ฐ ๋์ง ์์ผ๋ฉด ์ ๋์ํ๋ ๊ฒ
1
sudo certbot renew --dry-run
โ๏ธ ์ด์ ๋ฐ๊ธ์ด ์๋ฃ๋์์ผ๋ฏ๋ก /etc/letsencrypt/live/๋๋ฉ์ธ
๊ฒฝ๋ก์ fullchain.pem
, privkey.pem
์ด ๋ฐ๊ธ๋์์ ๊ฒ์ด๋ค. (๐บ ๊ฑด๋๋ฐ๊ธฐ)
- ์๋ก ํฐ๋ฏธ๋ ํญ ์ด๊ณ
- root๊ณ์ ์ผ๋ก ํด๋น ๊ฒฝ๋ก๋ก ์ด๋ ๐ด ๋ฐ๋ก
cd /etc/letsencrypt/live/๋๋ฉ์ธ
์ผ๋ก ์คํํ๋ ๋์ํ์ง ์์๋ค!
์ด์ :/etc/
is usually restricted, needs elevated permissions.
To get elevated permissions, usesudo
However,cd
withsudo
might not work bccd
is a shell-built-in command.
To solve, open a shell withsudo
and then navigate.
1
2
sudo -s
cd /etc/letsencrypt/live/drugstoreproject.shop/
โ๏ธ pem์ PKCS12ํ์์ผ๋ก ๋ณ๊ฒฝ (๐บ ๊ฑด๋๋ฐ๊ธฐ)
.pem
์ ์คํ๋ง๋ถํธ์์ ์ธ์์ ๋ชปํ๋ค.- ๋ฐ๋ผ์ PKCS12ํ์์ผ๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค.
- ๋ณ๊ฒฝํ ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํด์ผ ํ๋๋ฐ ์ด ๋น๋ฐ๋ฒํธ ๊ผญ ๊ธฐ์ตํ ๊ฒ(๋์ค์ yamlํ์ผ์ ์ค์ ํจ)
- ๊ฒฐ๊ณผ๋ฌผ: keystore.p12
- ๋ณ๊ฒฝ ํ ๋๊ฐ๋ ค๋ฉด
exit
์น๋ฉด ๋๋ค.
1
sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name ttp -CAfile chain.pem -caname root
โ๏ธ ๋ชจ๋ HTTPS์ค์ ๋! Nginx ์๋ฒ restart (๐บ ๊ฑด๋๋ฐ๊ธฐ)
1
sudo service nginx restart
โ FileZilla (๐บ ๊ฑด๋๋ฐ๊ธฐ)
FileZilla์์ keystore.p12
ํ์ผ ๋ก์ปฌ๋ก ๊ฐ์ ธ์ค๊ธฐ
โ๏ธ FileZilla์ ์๋ก์ด ์ฌ์ดํธ ์ถ๊ฐ
- FileZilla Client ์ค์น
ํ๋กํ ์ฝ: SFTP
ํธ์คํธ: AWS EC2 ํผ๋ธ๋ฆญ IPv4
์ฌ์ฉ์: ubuntu
๋ก๊ทธ์จ ์ ํ: ํค ํ์ผ
ํค ํ์ผ(pem์ด ์กด์ฌํ๋ ๊ฒฝ๋ก)
๐ด FileZilla์์ keystore.p12
์ด ์๋ ๊ฒฝ๋ก /etc/letsencrypt/live/๋๋ฉ์ธ
๋ก ๋ค์ด๊ฐ๋ ค๊ณ ํ๋๋ฐ ๊ณ์ ์คํจ
๊ถํ์ด ์๋ค๊ณ ๋ด๋ค.
๊ฒฐ๊ตญ keystore.p12
๋ฅผ home/ububtu
๋ก ์ฎ๊ฒจ ๊ฑฐ๊ธฐ์ ๋ก์ปฌ๋ก ๋ฐ์์ด
๋ก์ปฌ ์ํ๋ ์ฅ์์ ์ ์ฅ ํ ์ดํ์ SpringBoot์ ์ถ๊ฐ
โ๏ธ ์ฌ๊ธฐ๊น์ง ๊ณผ์ ์ด์ ๋ฆฌ
โ SpringBoot Setting (๐บ ๊ฑด๋๋ฐ๊ธฐ)
โ๏ธ Resources์ SSL์ธ์ฆ์ ํ์ผ ๋ฃ๊ธฐ
โ๏ธ yaml ํ์ผ์ ์ค์ ์ถ๊ฐ
1
2
3
4
5
server:
ssl:
key-store: classpath:keystore.p12
key-store-type: "PKCS12"
key-store-password: ENC(i5PeoNKddffOFHGj/baHbHVAsek6cRQK) //PKCS12๋ณ๊ฒฝํ ๋ ์ฌ์ฉํ ๋น๋ฐ๋ฒํธ
๐ด ๋๋ฉ์ธ ์ฐ๊ฒฐ์ด ์ ๋จ
์ฌ๊ธฐ๊น์ง ๋ฐ๋ผํ์ผ๋ http://drugstoreproject.shop:8080/swagger-ui/index.html
์ณ๋ ์ค์จ๊ฑฐ ํ๋ฉด์ด 404๋ก ๋ธ
๐ต nginx config
๋ฅผ ์์ ํ์๋ค.
- Open Nginx Configuration
1
sudo nano /etc/nginx/sites-available/drugstoreproject.shop
- Update config
- Check syntax error in Nginx Configuration
1
sudo nginx -t
- Reload nginx
1
sudo systemctl reload nginx
๊ทธ๋ฌ๋๋ ์ค์จ๊ฑฐ ํ๋ฉด์ ์ ๋์ค๊ฒ ๋์์!
๊ทธ๋ฌ๋ ์์ง๋ https://
๋ ๋์ง๋ฅผ ์๋๋คใ
ใ
๐ด https ํด๊ฒฐ
https://
๋ก ๋๋ฉ์ธ์ ์ฐ๊ฒฐํ๋ฉด ์ด๋ฐ ํ๋ฉด์ด ๋ธ
๊ทธ๋ฆฌ๊ณ https://drugstoreproject.shop:8080/swagger-ui/index.html
๋ ERR_SSL_PROTOCOL_ERROR
์ด ๋ฌ๋ค.
โ Nginx conf ์ค์
โ๏ธ Nginx์ nginx.conf, sites-available, sites-enabled
/ets/nginx/nginx.conf
Nginx ์ค์ ์ ๊ดํ ๋ธ๋ก ์์ฑ
์ด ํ์ผ์์sites-enabled
ํด๋์ ์๋ ํ์ผ๋ค์ includeํ์ฌ ๊ฐ์ ธ์จ๋ค.
- /ets/nginx/sites-available
๊ฐ์ ์๋ฒ ํ๊ฒฝ์ ๋ํ ์ค์ ํ๋๋ค์ด ์์นํ ๋๋ ํ ๋ฆฌ
- /ets/nginx/sites-enabled
sites-available
์ ์๋ ๊ฐ์ ์๋ฒ ํ์ผ๋ค ์ค์์ ์คํ์ํค๊ณ ์ถ์ ํ์ผ์ symbolic link๋ก ์ฐ๊ฒฐํ ํด๋
์ด ํด๋์ ์์นํ ๊ฐ์์๋ฒ ํ๊ฒฝ ํ์ผ๋ค์ ์ฝ์ด ์ค์ ์๋ฒ๋ฅผ ์ธํ ํจ!
๐ก ๊ฒฐ๋ก
์ฐ๋ฆฌ๋
/ets/nginx/sites-available
์๋ ์๋ก์ดdrugstoreproject.shop
์ด๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณ ,
ํด๋sites-enabled
์ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ค์ดsites-enabled
๊ฐdrugstoreproject.shop
์ ๊ฐ๋ฆฌํค๋๋ก ํ ๊ฒ์ด๋ค!
โ symbolic link
๋งํฌ๋ฅผ ์ฐ๊ฒฐํด ์๋ณธ ํ์ผ์ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ด๋ ๋งํฌ
ํด๋ ๋ฐ๋ก๊ฐ๊ธฐ ๊ฐ์ ๊ฐ๋
ํน์ ํด๋์ ๋งํฌ๋ฅผ ๊ฑธ์ด ์๋ณธํ์ผ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ด๋ค.
โ๏ธ nginx.conf
nginx.conf
์ ์ด์ด๋ณด๋ฉด
1
2
cd /etc/nginx
vi nginx.conf
๊ฐ์ฅ ์๋์ ์ด๋ฐ ์ค์ ์ด ์์ด์ผ ํ๋ค.
- /etc/nginx/conf.d ์๋์ ์๋ ๋ชจ๋ .conf ํ์ผ๋ค์ inclueํ๋ค.
- /etc/nginx/sites-enabled์ ๋ชจ๋ ํ์ผ๋ค์ includeํ๋ค.
โ Nginx ์ค์
1๏ธโฃ sites-available ์ค์ (Create and configure a New Site Configuration)
1
sudo nano /etc/nginx/sites-available/drugstoreproject.shop
2๏ธโฃ ๋ค์๊ณผ ๊ฐ์ด ์
๋ ฅ ์ ์ฅ command + O
๋๊ฐ๊ธฐ command + X
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {
listen 80;
server_name drugstoreproject.shop www.drugstoreproject.shop;
return 301 https://drugstoreproject.shop$request_uri;
}
server {
listen 443 ssl http2;
server_name drugstoreproject.shop www.drugstoreproject.shop;
ssl_certificate /etc/letsencrypt/live/drugstoreproject.shop/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/drugstoreproject.shop/privkey.pem;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
if ($host = drugstoreproject.shop) {
return 301 https://$host$request_uri;
}
listen 80;
server_name drugstoreproject.shop;
return 404;
}
(1) 80ํฌํธ๋ก ๋ค์ด์ค๋ ์์ฒญ, ์ฆ http
๋ก ๋ค์ด์ค๋ ์์ฒญ์ https
๋ก ๋ฆฌ๋ค์ด๋ ์
์ ํ๋ค.
(2) https://
๋ก ๋ค์ด์ค๋ ์์ฒญ์ ์๋น์ค ์ค์ธ ํฌํธ๋ก ์ฐ๊ฒฐํ๋ค.
proxy_pass
: ํ๋ก์ ์ฃผ์, ๋ฐฑ์๋ ์ด์ ์๋ฒ ip- ๐ด ๋ ๋ฒ์งธ server ๋ธ๋ก
proxy_pass
๋http://localhost:8080;
์ด๋ค. http
โญ๏ธhttps
โ- 8080ํฌํธ์์๋ spring boot์ฑ์ด ์คํ๋๊ณ ์๋ ์ํ
- ๐ด ๋ ๋ฒ์งธ server ๋ธ๋ก
proxy_set_header Host $http_host;
: HTTP request์ Host ํค๋ ๊ฐ, ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์๋ ํธ์คํธ ์ฃผ์X-Real-IP
: ์ค์ ๋ฐฉ๋ฌธ์์ ์๊ฒฉ IP์ฃผ์X-Forwarded-For
: ํด๋ผ์ด์ธํธ๊ฐ ํ๋ก์ ์ฒ๋ฆฌํ ๋ชจ๋ ์๋ฒ์ IP์ฃผ์๋ฅผ ํฌํจํ๋ ๋ชฉ๋กX-Forwarded-Proto
: HTTP๊ตฌ์กฐ๋ก http ๋๋ https๋ฅผ ์๋ฏธ
(3) ๋๋ฉ์ธ ์ด๋ฆ์ด ๋ค๋ฅด๋ฉด 404์๋ฌ ์ฒ๋ฆฌ
3๏ธโฃ Enable the new site
create a symbolic link
ํด์ sites-enabled
๋ก ์ฐ๊ฒฐ
์ฐ๋ฆฌ๊ฐ ๋ง๋ configํ์ผ์ sites-enabled
๋๋ ํ ๋ฆฌ์ ๋งํฌํด์ค๋ค.
1
sudo ln -s /etc/nginx/sites-available/drugstoreproject.shop /etc/nginx/sites-enabled/
์ ๋ง๋ค์ด์ก๋์ง ํ์ธํ๊ณ ์ถ์ผ๋ฉด
1
2
3
cd /etc/nginx/sites-enabled
ls -l
4๏ธโฃ default site๋ฅผ ์ญ์ ํ๋ค.
๊ทธ๋์ ์๊น sites-available/default
๋ ๊ฑด๋๋ฐ๋ผ๊ณ ํ๊ฑฐ๋คโฆ
1
sudo rm /etc/nginx/sites-enabled/default
5๏ธโฃ Config์ syntax error ์๋์ง ํ์ธ
1
sudo nginx -t
6๏ธโฃ reload nginx
1
sudo systemctl reload nginx
โ Error Log ๋ณด๊ธฐ
1๏ธโฃ Error Log
์๋ ๋๋ ํ ๋ฆฌ๋ก ๊ฐ๊ธฐ
1
cd /var/log/nginx
ls
ํด๋ณด๋ฉด error.log
์์ ๊ฒ์ด๋ค.
2๏ธโฃ View error.log
content
1
cat error.log
๐ด ์ฌ๊ธฐ๊น์ง ํ๋๋ 502์๋ฌ
๊ทธ๋๋ https://drugstoreproject.shop/
๋ ์ ๋์๋๋ฐ, Nginx Config์ค์ ์ ํ๊ณ ์ค๋ 502 ์๋ฌ๊ฐ ๋ด๋ค.
์๋ฌ ๋ก๊ทธ๋ฅผ ์ฐ์ด ๋ณด๋ ์ด๋ ๊ฒ ๋์๋ค.
๐ต ์ด ์๋ฌ๋ configํ์ผ ๋ฌธ์ ๋๋ฌธ์ ์๊ธด๋ค.
nginx config์์ 443์ผ๋ก ๋ค์ด์จ ์์ฒญ์ http
๋ก ์ฐ๋ฆฌ ์๋น์ค์ ์ฐ๊ฒฐ์ ์์ผ์ค์ผ ํ๋ค.
๊ทธ๋์ ๋ ๋ฒ์งธ server ๋ธ๋ก proxy_pass
๋ฅผ https
๊ฐ ์๋ http
๋ก ๊ณ ์ณ์ฃผ๋ ์ ์คํ๋์๋ค.
` http://localhost:8080;`์ด๋ ๊ฒ ๋ฐ๊พธ๊ธฐ
โญ๏ธ ์ฑ๊ณตํ ๋ชจ์ต
๐ก ์ฐธ๊ณ
AWS EC2, ๊ฐ๋น์, nginx, Certbot, FileZilla(์ด๊ฑธ๋ก ๋ฐ๋ผํ ๊ฒ) https://un-lazy-midnight.tistory.com/172
๋๋ฉ์ธ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ https://olrlobt.tistory.com/89
Nginx Config ์ค์ ํ๋ ๋ฐฉ๋ฒ https://velog.io/@coastby/Nginx-SSL-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
Filezilla: ํ์ผ์ง๋ผ๋ก ํ์ผ ์ ๋ก๋/๋ค์ด๋ก๋ ํ๊ธฐ https://velog.io/@ky0_hw/AWS-ec2-Filezilla%ED%8C%8C%EC%9D%BC%EC%A7%88%EB%9D%BC%EB%A1%9C-%ED%8C%8C%EC%9D%BC-%EC%97%85%EB%A1%9C%EB%93%9C%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C%ED%95%98%EA%B8%B0