Azure PostgreSQL Flexible Server๋ฅผ ์ฌ์ฉํ๋ ์ค TLS๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก enforced๋์ด ์๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๊ทธ๋์ ๋ณ๋ค๋ฅธ SSL ์ค์ ์์ด๋ ์ ๋์ํ์ง๋ง, ๋ฌธ๋ ์ด ์๋ฆฌ๊ฐ ๊ถ๊ธํด์ ธ์ ๊น์ด ํ๋ณด๊ฒ ๋์์ต๋๋ค.
์ด๋ฒ ๊ธ์์๋ PostgreSQL TLS ์ฐ๊ฒฐ์ ๋์ ์๋ฆฌ์ ๊ฐ SSL ๋ชจ๋์ ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ Azure์์์ ์ค์ ๊ตฌํ ๋ฐฉ์์ ์์๋ณด๊ฒ ์ต๋๋ค.
PostgreSQL ํด๋ผ์ด์ธํธ๋ ๊ณต์ ๋ฌธ์์ Table 32.1์ ๋ฐ๋ผ ์ฌ๋ฌ SSL ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ ๋ชจ๋๋ณ ๋ณด์ ์์ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
| SSL Mode | ์ํธํ | ์๋ฒ ์ธ์ฆ | MITM ๋ณดํธ | ์ฉ๋ |
|---|---|---|---|---|
disable | โ | โ | โ | ๋ก์ปฌ ๊ฐ๋ฐ ์ ์ฉ |
allow | Maybe | โ | โ | ๋น๊ถ์ฅ |
prefer | Maybe | โ | โ | ๋น๊ถ์ฅ |
require | โ | โ | โ | ๊ธฐ๋ณธ ์ํธํ |
verify-ca | โ | โ (CA๋ง) | Partial | ์ค๊ฐ ๋ณด์ |
verify-full | โ | โ (์์ ) | โ | ์ต๊ณ ๋ณด์ |
์ผ๋ฐ์ ์ผ๋ก require ์ค์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ์ค ํ ๋ฐ
Azure PostgreSQL Flexible Server๋ ๊ธฐ๋ณธ์ ์ผ๋ก TLS ์ฐ๊ฒฐ์ ๊ฐ์ ํฉ๋๋ค. ์ด๋ require_secure_transport ํ๋ผ๋ฏธํฐ๊ฐ ON์ผ๋ก ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ฐ๋ฐ ํ๊ฒฝ์ด๊ฑฐ๋ ์์ฒด์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด OFF๋ก ์ง์ ํด๋ ๋ฌด๋ฐฉํ๊ฒ ์ง๋ง ์์ฉํ๊ฒฝ์ด๊ฑฐ๋ ๋ณด์์ ์ธ ์ด์๊ฐ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด TLS ์ค์ ๋ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.

Azure์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก SSL์ด ํ์ฑํ ๋์ด ์์ต๋๋ค...
ํด๋ผ์ด์ธํธ ์ชฝ์์ SSL์ ๋นํ์ฑํ(Disalbed)ํ๊ณ ์ฐ๊ฒฐ์ ์๋ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค:
DBMS: PostgreSQL(๋ฒ์ 16.8)
๋๋ผ์ด๋ฒ: PostgreSQL JDBC Driver(๋ฒ์ 42.7.3, JDBC4.2)
[28000] FATAL: no pg_hba.conf entry for host "", user "john", database "postgres", no encryption.
์ด ์ค๋ฅ๋ Azure๊ฐ ์ํธํ๋์ง ์์ ์ฐ๊ฒฐ์ ๊ฑฐ๋ถํ๋ค๋ ๊ฒ์ ๋ช ํํ ๋ณด์ฌ์ค๋๋ค.
๋ฐ๋๋ก ์๋์ ๊ฐ์ด verify-full๋ก ํ๋ ๊ฒฝ์ฐ ์ฑ๊ณต์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค.(jetbrains data grip ์ฌ์ฉ์์)

Azure PostgreSQL์ ํ์ฌ ๋ค์ CA๋ค๋ก๋ถํฐ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ต๋๋ค:
Microsoft ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, ํด๋ผ์ด์ธํธ ํธํ์ฑ์ ์ํด 3๊ฐ์ ๋ฃจํธ CA ์ธ์ฆ์๋ฅผ ๋ชจ๋ ์ง์ํด์ผ ํฉ๋๋ค.
์ค์ ์ ์ ์ปดํจํฐ์ ํค์ฒด์ธ์์ ๊ฒ์์ ํ๋ฉด ์๋์ ๊ฐ์ด Root CA๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธ ํ ์ ์์ต๋๋ค.(Macos ๊ธฐ์ค)

Macos ๊ธฐ์ค์ผ๋ก ์คํฌํธ๋ผ์ดํธ์ ์ผ์ฒด์ธ ์ ๊ทผ์ ์น์๊ณ ๋ค์ด๊ฐ์ ๊ฒ์์ ํ์๋ฉด ์ธ์ฆ์๊ฐ ๋์ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
TLS์ ๊ฒฝ์ฐ์๋ ํ๋์ ์ธ์ฆ์๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๊ธฐ๋ณด๋ค๋ ์ฒด์ธ์ ํํ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
Azure PostgreSQL์ ์ผ๋ฐ์ ์ธ ์ธ์ฆ์ ์ฒด์ธ:
๐ ์๋ฒ ์ธ์ฆ์: yourserver.postgres.database.azure.com
โโ ๐ข ๋ฐ๊ธ์: Microsoft Azure TLS Issuing CA 01
โโ ๐ ์ค๊ฐ CA: Microsoft Azure TLS Issuing CA 01
โ โโ ๐ข ๋ฐ๊ธ์: Microsoft RSA Root CA 2017
โ โโ โ๏ธ ์๋ช
: Microsoft RSA Root CA 2017์ ๊ฐ์ธํค
โโ ๐ ๋ฃจํธ CA: Microsoft RSA Root CA 2017 (ํด๋ผ์ด์ธํธ ๋ณด์ ํ์)
require ๋ชจ๋๋์ ๊ณผ์ :
1. ํด๋ผ์ด์ธํธ: "SSL ์ฐ๊ฒฐ ํ์"
2. ์๋ฒ: "์ธ์ฆ์ ์ ์ก"
3. ํด๋ผ์ด์ธํธ: "์ธ์ฆ์ ๊ฒ์ฆ ์์ด ์ํธํ๋ง ์ ์ฉ"
์ฅ์ : ๋ฐ์ดํฐ ์ํธํ ๋ณด์ฅ
๋จ์ : ์ค๊ฐ์ ๊ณต๊ฒฉ(MITM)์ ์ทจ์ฝ
verify-ca ๋ชจ๋๋์ ๊ณผ์ :
1. ํด๋ผ์ด์ธํธ: "SSL + CA ๊ฒ์ฆ"
2. ์๋ฒ: "DigiCert ์๋ช
์ธ์ฆ์ ์ ์ก"
3. ํด๋ผ์ด์ธํธ: "๋ฃจํธ CA๋ก ์๋ช
๊ฒ์ฆ โ ์ ๋ขฐ"
์ฅ์ : CA ๊ฒ์ฆ์ผ๋ก ์ ๋ขฐ์ฑ ํ๋ณด
๋จ์ : ํธ์คํธ๋ช
๊ฒ์ฆ ์์
์ฝ๊ฒ ๋งํด ๋๊ตฐ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง CA์ธ์ฆ์๋ฅผ ํ ๋๋ก ์ฐ๊ฒฐ์ ํ๊ฒ ๋ค...
verify-full ๋ชจ๋๋์ ๊ณผ์ :
1. ํด๋ผ์ด์ธํธ: "SSL + CA + ํธ์คํธ๋ช
๊ฒ์ฆ"
2. ์๋ฒ: "์ธ์ฆ์ ์ ์ก"
3. ํด๋ผ์ด์ธํธ: "CA ๊ฒ์ฆ โ ํธ์คํธ๋ช
ํ์ธ โ ์์ ์ ๋ขฐ"
์ฅ์ : ์ต๊ณ ์์ค์ ๋ณด์
๋จ์ : ์ค์ ๋ณต์ก๋ ์ฆ๊ฐ

SSL ์ฌ์ฉ์์์์ ํด๋ผ์ด์ธํธ ์ธก ์ธ์ฆ์ ํ์ผ์ ์ค์ ํ๋ ์นธ์ด ์๋๋ฐ ์ด ์ต์ ๋ค์ mTLS๋ฅผ ์ํ ์ต์ ์ผ๋ก ๋ด์ฉ์ ์๋์ ๊ฐ์ต๋๋ค.
์ผ๋ฐ TLS๋ ์๋ฒ๋ง ์ธ์ฆํ์ง๋ง, mTLS๋ ํด๋ผ์ด์ธํธ๋ ์ธ์ฆ์๋ก ์ ์์ ์ฆ๋ช ํฉ๋๋ค.
์ผ๋ฐ TLS: ํด๋ผ์ด์ธํธ โ ์๋ฒ (์๋ฒ๋ง ์ธ์ฆ)
mTLS: ํด๋ผ์ด์ธํธ โ ์๋ฒ (์ํธ ์ธ์ฆ)
๊ณ ๋ณด์ ํ๊ฒฝ์์์ mTLS:
# DataGrip ์ค์
SSL Mode: verify-full
CA file: /path/to/server-ca.pem # ์๋ฒ ๊ฒ์ฆ์ฉ
Client Certificate: /path/to/client.crt # ํด๋ผ์ด์ธํธ ์ธ์ฆ์ฉ
Client Key: /path/to/client.key # ํด๋ผ์ด์ธํธ ๊ฐ์ธํค
์ค์ Azure PostgreSQL์ ์ธ์ฆ์ ์ฒด์ธ์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ต๋๋ค.
# ์ธ์ฆ์ ์ฒด์ธ ์ ์ฒด ํ์ธ
openssl s_client -starttls postgres -showcerts -connect yourserver.postgres.database.azure.com:5432
# SSL ์ฐ๊ฒฐ ์ํ ํ์ธ (์ฐ๊ฒฐ ํ SQL ์คํ, Azure ๊ธฐ์ค)
SELECT * from pg_stat_ssl;
Azure PostgreSQL์ TLS ์ฐ๊ฒฐ์ ๋ค์๊ณผ ๊ฐ์ ๊ณ์ธต์ ๋ณด์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค:
require_secure_transport = ONํต์ฌ ํฌ์ธํธ:
require ์ด์ ์ฌ์ฉverify-full ๊ถ์ฅ