SSL/TLS 와 mixed contents error

2023. 11. 6. 18:00ㆍCS/Network

πŸ’‘ μ›Ήμ‚¬μ΄νŠΈμ™€ μ‚¬μš©μž μ‚¬μ΄μ˜ 톡신을 μ•”ν˜Έν™”ν•˜λŠ” λ³΄μ•ˆ ν”„λ‘œν† μ½œ SSL/TLS λŠ” 개인 정보와 λ―Όκ°ν•œ 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ μ „μ†‘ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€.

SSL/TLS?

SSL(Secure Sockets Layer)은 μ›Ή ν†΅μ‹ μ˜ λ³΄μ•ˆμ„ μœ„ν•΄ μ‚¬μš©λ˜λŠ” ν”„λ‘œν† μ½œλ‘œ, 1996년에 SSL 3.0이 λ°œν‘œλœ 이후 μ—…λ°μ΄νŠΈλ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

SSL은 μ•Œλ €μ§„ μ—¬λŸ¬ 취약점이 있으며, 이둜 인해 λ³΄μ•ˆ 전문가듀은 SSL의 μ‚¬μš©μ„ μ€‘λ‹¨ν•˜κ³  TLS(Transport Layer Security)둜 μ „ν™˜ν•  것을 ꢌμž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

πŸ›‘ SSL이 μ·¨μ•½ν•œ 곡격
  • POODLE (Padding Oracle On Downgraded Legacy Encryption) 곡격: SSL 3.0의 취약점을 μ΄μš©ν•œ 곡격으둜, μ•”ν˜Έν™”λœ 톡신을 해독할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • DROWN (Decrypting RSA with Obsolete and Weakened eNcryption) 곡격: SSLv2의 취약점을 μ΄μš©ν•œ 곡격으둜, TLS μ•”ν˜Έν™”λ₯Ό μš°νšŒν•˜μ—¬ 톡신 λ‚΄μš©μ„ 해독할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • BEAST (Browser Exploit Against SSL/TLS) 곡격: SSL/TLS의 취약점을 μ΄μš©ν•œ 곡격으둜, μ•”ν˜Έν™”λœ μΏ ν‚€λ₯Ό νƒˆμ·¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

TLSλŠ” SSL의 후속 λ²„μ „μœΌλ‘œ, SSL의 취약점을 κ°œμ„ ν•œ μ΅œμ‹  μ•”ν˜Έν™” ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.

 

TLSλŠ” SSLκ³Ό μœ μ‚¬ν•œ λ°©μ‹μœΌλ‘œ μž‘λ™ν•˜μ§€λ§Œ, λ³΄μ•ˆμ΄ κ°•ν™”λœ 것이 νŠΉμ§•μž…λ‹ˆλ‹€.

 

ν˜„μž¬ SSL을 인증 및 μ œκ³΅ν•˜λŠ” μ—…μ²΄λŠ” 사싀상 TLS μ•”ν˜Έν™”λ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

SSL의 μ΅œμ’… 버전인 3.0κ³Ό TLS의 졜초 버전인 1.0의 μ°¨μ΄λŠ” 크지 μ•ŠμŠ΅λ‹ˆλ‹€.

 

이름이 바뀐 것은 SSL을 κ°œλ°œν•œ Netscapeκ°€ μ—…λ°μ΄νŠΈμ— μ°Έμ—¬ν•˜μ§€ μ•Šκ²Œ λ˜μ–΄ μ†Œμœ κΆŒ 변경을 μœ„ν•΄μ„œ μ˜€λ‹€κ³  μ•Œλ €μ Έ μžˆμŠ΅λ‹ˆλ‹€.

GPT μ‹ κ·œκΈ°λŠ₯인 GPT + DALLE3 을 μ‚¬μš©ν•˜μ—¬ λ§Œλ“  이미지 ( κ·€μ—½λ‹Ή )

SSL의 λ™μž‘λ°©μ‹

μœ„ μ΄λ―Έμ§€λŠ” GPT μ‹ κ·œκΈ°λŠ₯ GPT + DALL·E 3 λ₯Ό μ‚¬μš©ν•˜μ—¬ SSL의 λ™μž‘λ°©μ‹μ„ 그렀달라 ν•˜μ—¬ 방금 μ œμž‘ν•œ 이미지

  1. ν΄λΌμ΄μ–ΈνŠΈ ν—¬λ‘œ(Client Hello): ν΄λΌμ΄μ–ΈνŠΈ(예: μ›Ή λΈŒλΌμš°μ €)λŠ” μ„œλ²„μ— 연결을 μ‹œλ„ν•˜λ©°, μ‚¬μš© κ°€λŠ₯ν•œ μ•”ν˜Έν™” 방식(μ•”ν˜Έν™” μ•Œκ³ λ¦¬μ¦˜, μ„Έμ…˜ ν‚€ λ“±) λͺ©λ‘μ„ μ „μ†‘ν•©λ‹ˆλ‹€.
  2. μ„œλ²„ ν—¬λ‘œ(Server Hello): μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ λͺ©λ‘ μ€‘μ—μ„œ μ„ νƒν•œ μ•”ν˜Έν™” 방식을 ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ•Œλ €μ£Όκ³ , μžμ‹ μ˜ SSL μΈμ¦μ„œλ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.
  3. μΈμ¦μ„œ 검증(Certificate Verification): ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ μΈμ¦μ„œλ₯Ό κ²€μ¦ν•©λ‹ˆλ‹€. μ΄λŠ” μΈμ¦μ„œκ°€ μ‹ λ’°ν•  수 μžˆλŠ” 인증 κΈ°κ΄€(Certificate Authority, CA)에 μ˜ν•΄ λ°œκΈ‰λ˜μ—ˆλŠ”μ§€, μœ νš¨ν•œμ§€, 그리고 μ„œλ²„μ˜ 도메인 이름과 μΌμΉ˜ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.
  4. ν‚€ κ΅ν™˜(Key Exchange): μΈμ¦μ„œκ°€ μœ νš¨ν•˜λ‹€λ©΄, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ 곡개 ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 랜덀 ν•˜κ²Œ μƒμ„±ν•œ μ„Έμ…˜ ν‚€(λŒ€μΉ­ ν‚€)λ₯Ό μ•”ν˜Έν™”ν•˜κ³  μ„œλ²„μ—κ²Œ μ „μ†‘ν•©λ‹ˆλ‹€. μ„œλ²„λŠ” μžμ‹ μ˜ 개인 ν‚€λ‘œ 이λ₯Ό λ³΅ν˜Έν™”ν•˜μ—¬ μ„Έμ…˜ ν‚€λ₯Ό μ–»μŠ΅λ‹ˆλ‹€.
  5. μ„Έμ…˜ μ‹œμž‘(Session Initiation): μ„œλ²„λŠ” μ„Έμ…˜ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ•”ν˜Έν™”λœ λ©”μ‹œμ§€λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „μ†‘ν•˜μ—¬ μ„Έμ…˜ ν‚€κ°€ μ„±κ³΅μ μœΌλ‘œ κ΅ν™˜λ˜μ—ˆμŒμ„ ν™•μΈν•©λ‹ˆλ‹€.
  6. μ•”ν˜Έν™”λœ μ„Έμ…˜(Encrypted Session): ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” 이제 μ„Έμ…˜ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ•”ν˜Έν™”ν•˜κ³  λ³΅ν˜Έν™”ν•˜λ©°, 이λ₯Ό 톡해 μ•ˆμ „ν•œ 톡신 채널을 μœ μ§€ν•©λ‹ˆλ‹€.

SSL/TLS μΈμ¦μ„œ μœ λ£Œμ™€ 무료의 차이?

  • 보증 κ³Ό λ³΄ν—˜
    • 유료의 경우 보증과 λ³΄ν—˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€. μΈμ¦μ„œ λ°œκΈ‰μž(Certificate Authority, CA)의 μ‹€μˆ˜λ‘œ μΈν•œ 손싀에 λŒ€ν•΄ 일정 κΈˆμ•‘μ„ 보상받을 수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.
  • 유효 κΈ°κ°„
    • 유료의 경우 1~2λ…„μ˜ μœ νš¨κΈ°κ°„μ„ 가지고 무료의 경우 90일을 가지고 μžˆμ–΄ μ’€ 더 μž¦μ€ 갱신이 ν•„μš”ν•¨
  • μΈμ¦μ„œ μœ ν˜•
    • 유료 μΈμ¦μ„œλŠ” λ‹€μ–‘ν•œ μœ ν˜•μ„ μ œκ³΅ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν™•μž₯ 검증(EV) μΈμ¦μ„œλŠ” 쑰직의 신원을 μ² μ €νžˆ κ²€μ¦ν•˜λ©°, λΈŒλΌμš°μ € μ£Όμ†Œμ°½μ— 쑰직의 이름을 ν‘œμ‹œν•©λ‹ˆλ‹€. 무료 μΈμ¦μ„œλŠ” 주둜 도메인 검증(DV) μΈμ¦μ„œλ§Œμ„ μ œκ³΅ν•˜λ©°, 쑰직의 신원을 κ²€μ¦ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
    유료 μΈμ¦μ„œ 쀑 ν™•μž₯ 검증(EV) μΈμ¦μ„œ:
    • 이 μΈμ¦μ„œλŠ” μ›Ήμ‚¬μ΄νŠΈκ°€ μ†ν•œ νšŒμ‚¬λ‚˜ 쑰직이 μ‹€μ œλ‘œ μ‘΄μž¬ν•˜κ³ , λ²•μ μœΌλ‘œ μΈμ •λ°›λŠ” 업체인지λ₯Ό μ² μ €νžˆ κ²€μ¦ν•©λ‹ˆλ‹€.
    • 검증 과정은 κ½€ κΉŒλ‹€λ‘­κ³ , μ—¬λŸ¬ 법적 λ¬Έμ„œλ₯Ό κ²€ν† ν•΄μ•Ό ν•©λ‹ˆλ‹€.
    • 검증이 μ™„λ£Œλ˜λ©΄, μ›Ή λΈŒλΌμš°μ €μ˜ μ£Όμ†Œμ°½μ— νšŒμ‚¬λ‚˜ 쑰직의 이름이 λ…Ήμƒ‰μœΌλ‘œ ν‘œμ‹œλ˜μ–΄, λ°©λ¬Έμžλ“€μ—κ²Œ ν•΄λ‹Ή μ‚¬μ΄νŠΈκ°€ 맀우 μ•ˆμ „ν•˜λ‹€λŠ” 것을 μ•Œλ €μ€λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, μ€ν–‰μ΄λ‚˜ λŒ€ν˜• 온라인 μ‡Όν•‘λͺ°μ—μ„œ 주둜 μ‚¬μš©ν•©λ‹ˆλ‹€.
    무료 μΈμ¦μ„œ 쀑 도메인 검증(DV) μΈμ¦μ„œ:
    • 이 μΈμ¦μ„œλŠ” μ›Ήμ‚¬μ΄νŠΈμ˜ 도메인 이름(예: [www.example.com)이](http://www.example.㯘%29-ub50a/) μ‹ μ²­μžμ— μ˜ν•΄ ν†΅μ œλ˜κ³  κ΄€λ¦¬λ˜κ³  μžˆμŒλ§Œμ„ ν™•μΈν•©λ‹ˆλ‹€.
    • 검증 과정은 κ°„λ‹¨ν•˜λ©°, μ΄λ©”μΌμ΄λ‚˜ 도메인 λ ˆμ½”λ“œλ₯Ό 톡해 μ‹ μ†ν•˜κ²Œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.
    • μ›Ή λΈŒλΌμš°μ €μ˜ μ£Όμ†Œμ°½μ—λŠ” νŠΉλ³„ν•œ ν‘œμ‹œκ°€ μ—†μ§€λ§Œ, 'https://'와 μžλ¬Όμ‡  μ•„μ΄μ½˜μ΄ λ³΄μ—¬μ„œ λ°©λ¬Έμžλ“€μ—κ²Œ μ•”ν˜Έν™”λœ μ—°κ²°μ΄λΌλŠ” 것을 μ•Œλ €μ€λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, 개인 λΈ”λ‘œκ·Έλ‚˜ μ†Œκ·œλͺ¨ μ›Ήμ‚¬μ΄νŠΈμ—μ„œ 주둜 μ‚¬μš©ν•©λ‹ˆλ‹€.

그러면 λ¬΄λ£Œμ™€ 유료λ₯Ό μ„ νƒν•˜λŠ” 기쀀이 λ­κ°€μžˆμ„κΉŒ?

κΈ°μ—…μ˜ 신뒰도
λ―Όκ°ν•œ κ°œμΈμ •λ³΄ ( μΉ΄λ“œλ²ˆν˜Έ, μΉ΄λ“œλΉ„λ°€λ²ˆν˜Έ, μ—¬κΆŒ, μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ … )
κ·œμ • μ€€μˆ˜

 

졜근 동ν–₯

TLSλŠ” ν˜„μž¬ 1.0, 1.1, 1.2, 1.3(μ΅œμ‹ )으둜 총 4 개 버전이 쑴재

이 쀑 ꡬ버전인 1.0 , 1.1 버전은 SSL 3.0κ³Ό λ˜‘κ°™μ΄ μ·¨μ•½ν•œ 곡격(POODLEκ³Ό BEAST와 같은 μ—¬λŸ¬ 곡격)이 μžˆμŠ΅λ‹ˆλ‹€.

μ›Ή λΈŒλΌμš°μ € μ œκ³΅μ—…μ²΄λ₯Ό μ‹œμž‘μœΌλ‘œ λ§Žμ€ 인터넷 μ„œλΉ„μŠ€ 제곡 업체듀이 ꡬ버전인 1.0 1.1의 지원을 μ€‘λ‹¨ν•˜κ³ , μ΅œμ‹ λ²„μ „μ˜ TLSλ₯Ό μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

Mixed contents Error

Mixed contents ErrorλŠ” μ›ΉνŽ˜μ΄μ§€μ— SSL둜 μ•”ν˜Έν™”λœ λ‚΄μš©κ³Ό μ•”ν˜Έν™”λ˜μ§€ μ•Šμ€ λ‚΄μš©μ΄ ν˜Όν•©λ˜μ–΄ μžˆμ„ λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ

πŸ’‘ Front Server = HTTPS WAS = HTTP Front Server → WAS μš”μ²­μ„ 보냄

 

μœ„ μ˜ˆμ‹œμ—μ„œλŠ” Front Serverμ—μ„œ Request ν•œ μ •λ³΄λŠ” SSL둜 μ•”ν˜Έν™”λ˜μ–΄μžˆλŠ” μƒνƒœ, WAS의 Response μ •λ³΄λŠ” μ•”ν˜Έν™”κ°€ λ˜μ–΄μžˆμ§€ μ•Šμ€ μƒνƒœλ‘œ Mixed contents Error κ°€ λ°œμƒν•©λ‹ˆλ‹€.

⚠️Mixed contents Errorλ₯Ό ν•΄κ²°ν•˜λ €λ©΄?⚠️

근본적 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Front Server와 WAS λͺ¨λ‘ SSL/TLSλ₯Ό λ°œκΈ‰λ°›μ•„μ„œ μ„œλ²„μ— μ„€μ •ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

κ°„λ‹¨ν•œ ν•΄κ²° 방법

  • μš”μ²­μ΄ HTTP이고 WASκ°€ HTTPS 일 λ•Œ λ°œμƒν•œ 경우 How to fix "insecure content was loaded over HTTPS, but requested an insecure resource"
  • <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> νƒœκ·Έλ₯Ό HTML 파일의 **<head>**에 μΆ”κ°€ν•˜λ©΄, λΈŒλΌμš°μ €λŠ” νŽ˜μ΄μ§€ λ‚΄μ˜ λͺ¨λ“  HTTP λ¦¬μ†ŒμŠ€ μš”μ²­μ„ HTTPS둜 μžλ™ μ—…κ·Έλ ˆμ΄λ“œν•˜μ—¬ μš”μ²­ν•˜κ²Œ λ©λ‹ˆλ‹€
  • WAS κ°€ HTTP이고 μš”μ²­μ΄ HTTPS 일 λ•Œ
  • μ„œλ²„μ—μ„œ SSL μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.(근본적으둜 ν•΄κ²°ν•˜μ„Έμš” πŸ‘)
  • μ™ΈλΆ€ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•  λ•Œμ—λ„ SSL을 μ‚¬μš©ν•˜λ„λ‘ ν•˜κ³ , μ•”ν˜Έν™”λœ 연결을 μ œκ³΅ν•˜λŠ” ν˜ΈμŠ€νŒ… μ„œλΉ„μŠ€λ‚˜ CDN(Content Delivery Network)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
    • CDN?
    • CDN(Content Delivery Network)은 μ „ 세계에 λΆ„μ‚°λœ μ„œλ²„ λ„€νŠΈμ›Œν¬λ‘œ, μ›Ήμ‚¬μ΄νŠΈμ˜ μ½˜ν…μΈ λ₯Ό μ‚¬μš©μžμ—κ²Œ λΉ λ₯΄κ²Œ μ „λ‹¬ν•˜λŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈμ— μ ‘μ†ν•˜λ©΄, CDN은 μ‚¬μš©μžμ—κ²Œ κ°€μž₯ κ°€κΉŒμš΄ μ„œλ²„μ—μ„œ μ½˜ν…μΈ λ₯Ό μ œκ³΅ν•˜μ—¬, λ‘œλ”© μ‹œκ°„μ„ 쀄이고 μ‚¬μš©μž κ²½ν—˜μ„ ν–₯μƒν•©λ‹ˆλ‹€.