study/๋ณด์•ˆ

SSL์ด๋ž€? (Secure Sockets Layer)

dddzr 2025. 3. 24. 23:12

๐Ÿ” SSL์ด๋ž€? (Secure Sockets Layer)

SSL(Secure Sockets Layer)์€ ์ธํ„ฐ๋„ท์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๋ณด์•ˆ ํ”„๋กœํ† ์ฝœ์ด๋‹ค! ๐Ÿ”’

 

โœ… ๊ธฐ๋ณธ ๊ฐœ๋…

  • ํด๋ผ์ด์–ธํŠธ(์›น ๋ธŒ๋ผ์šฐ์ €)์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์•”ํ˜ธํ™”ํ•˜์—ฌ ํ•ด์ปค๊ฐ€ ์ค‘๊ฐ„์—์„œ ์ •๋ณด๋ฅผ ํ›”์ณ๋ณด๋Š” ๊ฑธ ๋ฐฉ์ง€ํ•˜๋Š” ๊ธฐ์ˆ 
  • ํ˜„์žฌ๋Š” SSL์˜ ํ›„์† ๋ฒ„์ „์ธ TLS(Transport Layer Security)๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ง€๋งŒ, ๊ด€ํ–‰์ ์œผ๋กœ SSL์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ๊ณ„์† ์‚ฌ์šฉ

๐Ÿ“Œ 1. SSL์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

โœ… 1-1. ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” (Encryption)

  • ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•ด์„œ ์ œ3์ž๊ฐ€ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์—†๋„๋ก ๋ณดํ˜ธ

โœ… 1-2. ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ (Integrity)

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ „์†ก ์ค‘ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธ (ํ•ด์ปค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๊ฐ„์—์„œ ์กฐ์ž‘ํ•˜๋Š” ๊ฑธ ๋ฐฉ์ง€)

โœ… 1-3. ์‹ ์› ์ธ์ฆ (Authentication)

  • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘์†ํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„์ธ์ง€ ํ™•์ธ (ํ”ผ์‹ฑ ์‚ฌ์ดํŠธ ๋ฐฉ์ง€)

๐Ÿ“Œ 2. SSL์ด ํ•„์š”ํ•œ ์ด์œ 

โœ” ๋น„๋ฐ€๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ์ •๋ณด ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธ
โœ” ๊ณต๊ฒฉ์ž๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋กœ์ฑ„๋Š” โ€˜์ค‘๊ฐ„์ž ๊ณต๊ฒฉ(Man-in-the-Middle Attack)โ€™ ๋ฐฉ์ง€
โœ” ์›น์‚ฌ์ดํŠธ์˜ ์‹ ๋ขฐ๋„ ํ–ฅ์ƒ (SSL ์ธ์ฆ์„œ๊ฐ€ ์—†์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €์—์„œ โ€˜์•ˆ์ „ํ•˜์ง€ ์•Š์Œโ€™ ๊ฒฝ๊ณ ๊ฐ€ ๋œฐ ์ˆ˜๋„ ์žˆ์Œ โš ๏ธ)
โœ” SEO(๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”)์—๋„ ๊ธ์ •์ ์ธ ์˜ํ–ฅ (Google์€ HTTPS ์›น์‚ฌ์ดํŠธ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๋…ธ์ถœํ•จ)


๐Ÿ“Œ 3. SSL์˜ ์ž‘๋™ ์›๋ฆฌ

โœ… 3-1. SSL Handshake (SSL ์—ฐ๊ฒฐ ๊ณผ์ •)

1๏ธโƒฃ ํด๋ผ์ด์–ธํŠธ(๋ธŒ๋ผ์šฐ์ €)๊ฐ€ ์„œ๋ฒ„์— HTTPS ์š”์ฒญ
2๏ธโƒฃ ์„œ๋ฒ„๊ฐ€ SSL ์ธ์ฆ์„œ(CRT, ๊ณต๊ฐœ ํ‚ค ํฌํ•จ)๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก
3๏ธโƒฃ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธ์ฆ์„œ ๊ฒ€์ฆ

์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” CA์—์„œ ๋ฐœ๊ธ‰๋˜์—ˆ๋Š”์ง€, ๋งŒ๋ฃŒ/๋„๋ฉ”์ธ๊ณผ ์ผ์น˜

์ธ์ฆ์„œ๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋ฉด, "์ด ์‚ฌ์ดํŠธ๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค" ๊ฒฝ๊ณ  ๋ฐœ์ƒ ๐Ÿšจ

 4๏ธโƒฃ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ์•”ํ˜ธํ™” ๋ฐฉ์‹(ํ‚ค ๊ตํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜) ํ˜‘์ƒ

 ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋Œ€์นญํ‚ค๋ฅผ ์ƒ์„ฑ, ๋Œ€์นญํ‚ค๋ฅผ ๊ณต๊ฐœํ‚ค๋กœ ์•”ํ˜ธํ™” (Key Exchange)

์„œ๋ฒ„๋Š” ์ž์‹ ์˜ ๊ฐœ์ธ ํ‚ค(Private Key)๋กœ ๋ณตํ˜ธํ™”ํ•˜์—ฌ ๋Œ€์นญํ‚ค๋ฅผ ์–ป์Œ
5๏ธโƒฃ ๋ณด์•ˆ ์„ธ์…˜ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ „์†ก

๋ณด์•ˆ ์„ธ์…˜ ์‹œ์ž‘ (TLS Handshake ์™„๋ฃŒ)

  • ์ด์ œ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๊ฐ™์€ ๋Œ€์นญํ‚ค๋ฅผ ๊ณต์œ 
  • ์ดํ›„์˜ ๋ชจ๋“  ํ†ต์‹ ์€ ์ด ๋Œ€์นญํ‚ค๋กœ ์•”ํ˜ธํ™”๋จ(๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•จ)
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ๋Œ€์นญํ‚ค๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ฃผ๊ณ ๋ฐ›์Œ

๐Ÿ”ฅ ์ด ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ๊ฐ„ ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ์ด ๋งบ์–ด์ง„๋‹ค!


๐Ÿ“Œ 4. SSL ์ธ์ฆ์„œ๋ž€?

SSL์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ด€(CA, Certificate Authority)์—์„œ ๋ฐœ๊ธ‰ํ•œ SSL ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
์ธ์ฆ์„œ์—๋Š” ๋„๋ฉ”์ธ ์ •๋ณด, ๊ธฐ๊ด€ ์ •๋ณด, ๊ณต๊ฐœ ํ‚ค(public key) ๋“ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค!

 

๐Ÿ”น SSL ์ธ์ฆ์„œ์˜ ์ข…๋ฅ˜

์ธ์ฆ์„œ ์ข…๋ฅ˜ ํŠน์ง•
DV (Domain Validation) ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ธ์ฆ์„œ, ๋„๋ฉ”์ธ ์†Œ์œ ์ž ํ™•์ธ
OV (Organization Validation) ๊ธฐ์—… ์ •๋ณด๊นŒ์ง€ ๊ฒ€์ฆ, ์‹ ๋ขฐ๋„ โ†‘
EV (Extended Validation) ์ตœ์ƒ์œ„ ๋ณด์•ˆ ์ˆ˜์ค€, ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— ํšŒ์‚ฌ ์ด๋ฆ„ ํ‘œ์‹œ

โญ Let's Encrypt ๊ฐ™์€ ๋ฌด๋ฃŒ ์ธ์ฆ์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค!


๐Ÿ“Œ 5. HTTPS์™€ SSL์˜ ๊ด€๊ณ„

  • HTTPS = HTTP + SSL/TLS
  • ๊ธฐ์กด HTTP ํ”„๋กœํ† ์ฝœ์„ SSL/TLS๋กœ ๊ฐ์‹ธ์„œ ๋ณด์•ˆ์ด ๊ฐ•ํ™”๋œ ํ†ต์‹  ๋ฐฉ์‹
  • ์›น์‚ฌ์ดํŠธ์—์„œ https://๋กœ ์‹œ์ž‘ํ•˜๋ฉด SSL/TLS๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒƒ!

๐Ÿ“Œ 6. MSA์—์„œ SSL ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

โžก๏ธ MSA ํ™˜๊ฒฝ์—์„œ๋Š”, API Gateway์—์„œ HTTPS๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‚ด๋ถ€๋Š” HTTP๋ฅผ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ !
โžก๏ธ ํ•˜์ง€๋งŒ ๋‚ด๋ถ€ ์„œ๋น„์Šค ๊ฐ„์—๋„ ๋ณด์•ˆ์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด SSL์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค! ๐Ÿ˜Š๐Ÿš€

 


๐Ÿ“Œ 7. SSL ์ ์šฉ ๋ฐฉ๋ฒ•

โœ… 7-1. API Gateway์—์„œ SSL ์ ์šฉ (Nginx, Spring Cloud Gateway)

ํด๋ผ์ด์–ธํŠธ์™€ Gateway ๊ฐ„ ๋ณด์•ˆ ๊ฐ•ํ™”

 

๋ฐฉ๋ฒ• 1๏ธโƒฃ: Nginx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSL ์ ์šฉ (Let's Encrypt ๋˜๋Š” ์ž์ฒด ์ธ์ฆ์„œ ์‚ฌ์šฉ)

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;

    location / {
        proxy_pass http://backend-service;
    }
}

โžก๏ธ ์ด๋Ÿฌ๋ฉด API Gateway๊ฐ€ HTTPS๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋‚ด๋ถ€ ์„œ๋น„์Šค๋Š” HTTP๋กœ ์œ ์ง€ ๊ฐ€๋Šฅ!

 

๋ฐฉ๋ฒ• 2๏ธโƒฃ: Spring Cloud Gateway์—์„œ SSL ์ ์šฉ
application.yml

server:
  port: 8443
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: yourpassword
    key-store-type: PKCS12

โžก๏ธ Gateway ์ž์ฒด์—์„œ HTTPS ์ง€์› ๊ฐ€๋Šฅ!

 

โœ… 7-2. ์„œ๋น„์Šค ๊ฐ„ SSL ์ ์šฉ (Spring Boot, Eureka, Feign ๋“ฑ)

์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ๋„ ์•”ํ˜ธํ™”ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ

 

1๏ธโƒฃ ๊ฐ ์„œ๋น„์Šค์—์„œ HTTPS ํ™œ์„ฑํ™”
application.yml

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

 

2๏ธโƒฃ Feign Client์—์„œ HTTPS ์‚ฌ์šฉ

@FeignClient(name = "user-service", url = "https://user-service:8443")
public interface UserServiceClient {
    @GetMapping("/users/{id}")
    UserResponse getUser(@PathVariable Long id);
}

๐Ÿ”ฅ ์ด์ œ UserService๋กœ HTTPS ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค!

 

โœ… 7-3. Eureka & Config Server์—์„œ SSL ์ ์šฉ

1๏ธโƒฃ Eureka ์„œ๋ฒ„์—์„œ HTTPS ํ™œ์„ฑํ™”
application.yml

server:
  port: 8761
  ssl:
    key-store: classpath:eureka-keystore.p12
    key-store-password: eurekapass
    key-store-type: PKCS12

 

2๏ธโƒฃ ํด๋ผ์ด์–ธํŠธ์—์„œ Eureka์— HTTPS๋กœ ๋“ฑ๋ก

eureka:
  instance:
    secure-port-enabled: true
    non-secure-port-enabled: false
    hostname: eureka.example.com
  client:
    service-url:
      defaultZone: https://eureka.example.com:8761/eureka/

 

 


๐Ÿ“Œ 8. ์ •๋ฆฌ: ์–ด๋””์— SSL์„ ์ ์šฉํ• ๊นŒ?

์ ์šฉ ๋Œ€์ƒ SSL ์ ์šฉ ์—ฌ๋ถ€ ๋น„๊ณ 
API Gateway โ†” ํด๋ผ์ด์–ธํŠธ โœ… ํ•„์ˆ˜ ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ ๋ณดํ˜ธ (HTTPS)
API Gateway โ†” ๋‚ด๋ถ€ ์„œ๋น„์Šค โŒ ์„ ํƒ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ๋ผ๋ฉด HTTP ๊ฐ€๋Šฅ
์„œ๋น„์Šค โ†” ์„œ๋น„์Šค ๐Ÿ”ฅ ๊ถŒ์žฅ ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ HTTPS
Eureka, Config Server ๐Ÿ”ฅ ๊ถŒ์žฅ ๋ณด์•ˆ ๊ฐ•ํ™” ํ•„์š” ์‹œ HTTPS

 


๐Ÿ“Œ 9. SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๋ฐ ์ ์šฉ ๋ฐฉ๋ฒ• ๐Ÿ”’

SSL ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๊ณต์‹ ์ธ์ฆ๊ธฐ๊ด€(CA)์„ ํ†ตํ•œ ๋ฐœ๊ธ‰๊ณผ OpenSSL์„ ์ด์šฉํ•œ ์ž์ฒด ๋ฐœ๊ธ‰ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

โœ… 9-1. SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๊ณผ์ • (๊ณต์‹ CA vs OpenSSL ์ž์ฒด ๋ฐœ๊ธ‰)

SSL์„ ์ ์šฉํ•˜๋ ค๋ฉด ์•„๋ž˜ 3๊ฐ€์ง€ ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค.

  • Private Key (.key): ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•˜๋Š” ๋น„๋ฐ€ ํ‚ค (์™ธ๋ถ€์— ๋…ธ์ถœ๋˜๋ฉด ์•ˆ ๋จ)
  • CSR (.csr): ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ ํŒŒ์ผ (CA์—์„œ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์‹œ ํ•„์š”)
  • CRT (.crt): CA์—์„œ ๋ฐœ๊ธ‰ํ•ด์ฃผ๋Š” SSL ์ธ์ฆ์„œ ํŒŒ์ผ (์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ)

 

๐Ÿ“Œ OpenSSL๊ณผ ๊ณต์‹ CA์˜ SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ์ ˆ์ฐจ ์ฐจ์ด์ 

OpenSSL๊ณผ ๊ณต์‹ CA์˜ ๋ฐœ๊ธ‰ ์ ˆ์ฐจ๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ์ฐจ์ด์ ์ด ์žˆ๋‹ค!
๐Ÿ”น ๊ณตํ†ต์  : ๋‘˜ ๋‹ค Private Key์™€ CSR์„ ์ƒ์„ฑํ•ด์•ผ ํ•จ.
๐Ÿ”น ์ฐจ์ด์  :

  • OpenSSL ์ž์ฒด ๋ฐœ๊ธ‰์€ ์Šค์Šค๋กœ CA ์—ญํ• ์„ ํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•จ (๋ธŒ๋ผ์šฐ์ € ์‹ ๋ขฐ X)
  • ๊ณต์‹ CA๋Š” ์ œ3์ž ์ธ์ฆ๊ธฐ๊ด€(CA)์—์„œ ์„œ๋ช…ํ•˜๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณด์ฆํ•จ.

๐Ÿ’ก ๊ณต์‹ CA์˜ ๋ฐœ๊ธ‰ ๊ณผ์ •์€ ๋” ๋งŽ์€ ๊ฒ€์ฆ ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•˜๊ณ , OpenSSL ์ž์ฒด ๋ฐœ๊ธ‰์€ ๋น ๋ฅด์ง€๋งŒ ๋ณด์•ˆ์ƒ ์‹ ๋ขฐ๋ฅผ ์–ป๊ธฐ ์–ด๋ ค์›€

 

๐Ÿ”ฅ OpenSSL ๋ฐฉ์‹ vs. ๊ณต์‹ CA ์ธ์ฆ ๋ฐฉ์‹ ๋น„๊ต

๋ฐฉ์‹ ๊ณต์‹ CA ๋ฐœ๊ธ‰ (์œ ํšจํ•œ SSL) OpenSSL ์ž์ฒด ๋ฐœ๊ธ‰ (Self-Signed)
๋ณด์•ˆ์„ฑ โœ… ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Œ โŒ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Œ (๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฒฝ๊ณ )
์‹ ๋ขฐ๋„ โœ… ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ธ์ • โŒ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ธ์ฆ์„œ ์‹ ๋ขฐ ์„ค์ • ํ•„์š”
์‚ฌ์šฉ ๋ชฉ์  ์ƒ์šฉ ์›น์‚ฌ์ดํŠธ, ์„œ๋น„์Šค ์šด์˜ ๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ, ๋กœ์ปฌ ํ™˜๊ฒฝ
๋น„์šฉ ์œ ๋ฃŒ(์œ ๋ช… CA) / ๋ฌด๋ฃŒ(์˜ˆ: Let's Encrypt) ๋ฌด๋ฃŒ

๐Ÿšจ ๊ณต์‹ CA์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆ์„œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹ ๋ขฐํ•˜์ง€๋งŒ, OpenSSL ์ž์ฒด ๋ฐœ๊ธ‰ ์ธ์ฆ์„œ๋Š” '์•ˆ์ „ํ•˜์ง€ ์•Š์Œ' ๊ฒฝ๊ณ ๊ฐ€ ๋œฐ ์ˆ˜ ์žˆ๋‹ค!

 

โœ… 9-2. ๊ณต์‹ SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ (CA๋ฅผ ํ†ตํ•œ ์ธ์ฆ)

๐Ÿ”น ๊ณผ์ • ์š”์•ฝ

Private Key ์ƒ์„ฑ โ†’ CSR ์ƒ์„ฑ โ†’ CA ์ œ์ถœ โ†’ CA์—์„œ ๊ฒ€์ฆ ํ›„ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ โ†’ ์„œ๋ฒ„์— ์ ์šฉ

 

๐Ÿ”น๋ฐœ๊ธ‰ ์ ˆ์ฐจ

1๏ธโƒฃ CSR(Certificate Signing Request) ์ƒ์„ฑ

  • ๊ณต์‹ CA์—์„œ๋„ OpenSSL์„ ์ด์šฉํ•ด Private Key์™€ CSR์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ
  • ์„œ๋ฒ„์—์„œ **CSR ํŒŒ์ผ(์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ ํŒŒ์ผ)**์„ ์ƒ์„ฑํ•ด์•ผ ํ•จ
  • openssl genrsa -out my_private.key 2048
  • openssl req -new -key private.key -out request.csr

2๏ธโƒฃ CA์— ์ธ์ฆ์„œ ์š”์ฒญ ๋ฐ ๋„๋ฉ”์ธ ์†Œ์œ ๊ถŒ ์ธ์ฆ

  • CA(์˜ˆ: Let's Encrypt, DigiCert, GlobalSign ๋“ฑ)์— CSR ํŒŒ์ผ์„ ์ œ์ถœ
  • ๋„๋ฉ”์ธ ์†Œ์œ  ํ™•์ธ(DNS, ์ด๋ฉ”์ผ, ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐฉ์‹ ๋“ฑ) ํ›„ ์ธ์ฆ ์ง„ํ–‰
  • โœ” ์œ ๋ฃŒ SSL : DigiCert, GlobalSign, Comodo ๋“ฑ
  • โœ” ๋ฌด๋ฃŒ SSL : Let's Encrypt (์ž๋™ ๊ฐฑ์‹  ํ•„์š”)

3๏ธโƒฃ SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰

  • ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด CA์—์„œ SSL ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•จ (.crt ๋˜๋Š” .pem ํŒŒ์ผ)

4๏ธโƒฃ ์„œ๋ฒ„์— SSL ์ ์šฉ

  • ๋ฐœ๊ธ‰๋œ ์ธ์ฆ์„œ๋ฅผ ์›น ์„œ๋ฒ„(Nginx, Apache, Tomcat ๋“ฑ)์— ์„ค์ •
  • HTTPS ํ™œ์„ฑํ™”

 

โœ… 9-3. OpenSSL์„ ์ด์šฉํ•œ ์ž์ฒด ๋ฐœ๊ธ‰ (Self-Signed Certificate)

๋‚ด๋ถ€ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ OpenSSL์„ ์ด์šฉํ•ด์„œ ์ง์ ‘ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค!

 

๐Ÿ”น ๊ณผ์ • ์š”์•ฝ

Private Key ์ƒ์„ฑ โ†’ CSR ์ƒ์„ฑ โ†’ ์ž์ฒด ์„œ๋ช…๋œ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ โ†’ ์„œ๋ฒ„์— ์ ์šฉ

 

๐Ÿ”น ๋ฐœ๊ธ‰ ์ ˆ์ฐจ

- https://code.google.com/archive/p/openssl-for-windows/downloads

- ๋‹ค์šด๋กœ๋“œ ํ›„ ์••์ถ•ํ•ด์ œ

ํ•ด๋‹นํŒŒ์ผ/bin/openssl.exe๋ฅผ ์‹คํ—นํ•ฉ๋‹ˆ๋‹ค.

(์•ˆ๋˜์‹œ๋Š”๋ถ„๋“ค์€ cmd ๋กœ ํ•ด๋‹น ๊ฒฝ๋กœ ์ด๋™ ํ›„ ,  openssl.exe ํ˜น์€ ๊ด€๋ฆฌ์ž๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•ด๋ณด์„ธ์š”)

 

1๏ธโƒฃ ๋น„๊ณต๊ฐœ ํ‚ค(private key) ์ƒ์„ฑ

openssl genrsa -out my_private.key 2048

(๊ณต๊ฐœํ‚ค: openssl rsa -in private.key -pubout -out public.key)

 

2๏ธโƒฃ CSR ํŒŒ์ผ ์ƒ์„ฑ (์ธ์ฆ์„œ ์š”์ฒญ ํŒŒ์ผ)

openssl req -new -key my_private.key -out my_request.csr

 

3๏ธโƒฃ ์ž์ฒด ์„œ๋ช…๋œ SSL ์ธ์ฆ์„œ(CRT) ์ƒ์„ฑ

openssl x509 -req -days 365 -in my_request.csr -signkey my_private.key -out my_certificate.crt

 

โญ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด my_certificate.crt ์ธ์ฆ์„œ๊ฐ€ ์ƒ์„ฑ๋จ!
๐Ÿšจ ํ•˜์ง€๋งŒ, ๊ณต์‹ CA์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ธ์ฆ์„œ๋กœ ์ธ์‹๋จ!



โœ… 9-4. SSL ์ ์šฉ ๋ฐฉ๋ฒ• (Nginx & Spring Boot ์˜ˆ์‹œ)

๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ์›น ์„œ๋ฒ„์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

โœ… 9-4-1. Nginx์—์„œ SSL ์ ์šฉ

server {
    listen 443 ssl;
    server_name mydomain.com;

    ssl_certificate /etc/ssl/certs/my_certificate.crt;
    ssl_certificate_key /etc/ssl/private/my_private.key;

    location / {
        proxy_pass http://localhost:8080;
    }
}
  • ssl_certificate : ๋ฐœ๊ธ‰๋ฐ›์€ .crt ํŒŒ์ผ ๊ฒฝ๋กœ
  • ssl_certificate_key : ๊ฐœ์ธ ํ‚ค .key ํŒŒ์ผ ๊ฒฝ๋กœ

 

โœ…9-4-2. crt์™€ key๋ฅผ p12๋กœ ๋ณ€ํ™˜

Tomcat์€ .crt์™€ .key๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , .p12(PKCS12) ๋˜๋Š” .jks(Java Keystore) ํ˜•์‹์ด ํ•„์š”!

openssl pkcs12 -export -in my_certificate.crt -inkey my_private.key -out my_keystore.p12 -name tomcat

๐Ÿ’ก ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๊ณ  ๋‚˜์˜ค๋ฉด, ์ดํ›„ Tomcat ์„ค์ •์—์„œ ์‚ฌ์šฉํ•  ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋จ

 

โœ… 9-4-3. server.xml ์„ค์ • (Tomcat์— SSL ์ ์šฉ)

Tomcat์˜ server.xml์„ ์—ด์–ด์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์ถ”๊ฐ€!

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="200" SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="C:/path/to/my_keystore.p12"
                     type="PKCS12"
                     certificateKeystorePassword="mypassword"/>
    </SSLHostConfig>
</Connector>

โœ” certificateKeystoreFile : .p12 ํŒŒ์ผ์˜ ๊ฒฝ๋กœ
โœ” certificateKeystorePassword : .p12 ํŒŒ์ผ์„ ๋งŒ๋“ค ๋•Œ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ

๐Ÿš€ ์ด์ œ Tomcat์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด HTTPS(ํฌํŠธ 8443)๊ฐ€ ํ™œ์„ฑํ™”๋จ!

 

โœ… 9-4-4. Spring Boot์—์„œ SSL ์ ์šฉ

application.yml

server:
  port: 8443
  ssl:
    key-store: classpath:keystore.p12
    key-store-password: mypassword
    key-store-type: PKCS12
  • keystore.p12 ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์„œ ์„ค์ •ํ•˜๋ฉด Spring Boot์—์„œ๋„ HTTPS ์‚ฌ์šฉ ๊ฐ€๋Šฅ!

 


๐Ÿš€ ๊ฒฐ๋ก 

โœ… ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ณต์‹ CA์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ (๋ณด์•ˆ ๋ฐ ์‹ ๋ขฐ๋„ ๋ฌธ์ œ)
โœ… ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ๋Š” OpenSSL๋กœ ์ž์ฒด ๋ฐœ๊ธ‰ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Œ
โœ… MSA ํ™˜๊ฒฝ์—์„œ๋Š” API Gateway(Nginx, Spring Cloud Gateway ๋“ฑ)์—์„œ SSL์„ ์ ์šฉํ•˜๋Š” ๊ฒŒ ์ผ๋ฐ˜์ 

'study > ๋ณด์•ˆ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

JWT๋ž€? (JSON Web Token)  (0) 2025.02.16
์ €์žฅ์†Œ ๋น„๊ต  (0) 2024.12.01
๋ฐฉํ™”๋ฒฝ/IDS/IPS  (0) 2024.03.12
CNAPP (CWPP/SCPM/CIEM)  (0) 2024.03.12