iOS์์ API ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด http ํต์ ์ ํ๊ฒ ๋ ๋๋ ์์ํ ๋ฐ, ์ด์ ๊น์ง๋ App Transport Security policy ๊ด๋ จํ ์ปดํ์ผ ์๋ฌ๊ฐ ๋๋ฉด, Info.plist - App Transport Security Setting์ ์๋์ ๊ฐ์ด ์์ฑํด์ ๋ฐ๊ฟ์ฃผ์๋๋ฐ, ์ด๋ ๊ฒ ํ๋ฉด ๋ฐฐํฌํ ๋ ๋ฆฌ์ ๋นํ๋ค๋ ๋ง์ ๋ฃ๊ฒ ๋์๋ค..! ์๋ฌด๋ ์ง ์๊ฒ ์ฌ์ฉํด์๋๋ฐ, ๋ฐฐํฌํ ๋๋ ์ค์ ์ ์ ํด์ค์ผ ํ๋ ๊ฒ ๊ฐ์๋ค!
1. ATS์ ๊ด๋ จํ์ฌ
Apple ํ๋ซํผ์์ ์ฑ ์ ์ก ๋ณด์(ATS)์ด๋ผ๋ ๋คํธ์ํน ๋ณด์ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ฑ๊ณผ ์ฑ ํ์ฅ์ ๊ฐ์ธ ์ ๋ณด ๋ณดํธ ๋ฐ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ํฅ์์ํต๋๋ค. ์ฑ์์ ๋ง๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ์์ ์ํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ก ๊ณ์ธต ๋ณด์(TLS) ํ๋กํ ์ฝ์ ์ํด ๋ณดํธ๋๋๋ก ์๊ตฌํจ์ผ๋ก์จ ์ด๋ฅผ ์ํํฉ๋๋ค. ATS๋ ์ต์ ๋ณด์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋ ์ฐ๊ฒฐ์ ์ฐจ๋จํฉ๋๋ค.
ATS๋ iOS 9.0 ๋๋ macOS 10.11 SDK ์ด์๊ณผ ์ฐ๊ฒฐ๋ ์ฑ์ ๋ํด ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ํฉ๋๋ค.
ํ์ง๋ง, ์์ ํ ์์ ํ์ง ์์ ์๋ฒ์ ์ฐ๊ฒฐํด์ผ ํ๊ณ ๋ ์์ ํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ฌ๊ตฌ์ฑํ ์ ์๋ ๊ฒฝ์ฐ
( = http ์๋ฒ, TLS 1.1 ๋ฏธ๋ง์ https ์๋ฒ)
์ผ๋ถ ATS ์๊ตฌ ์ฌํญ์ ์ํํ๊ธฐ ์ํด ์์ธ๋ฅผ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ, ์ฌ์ฌ ์์ ์์ธ์ ๋ํ ์ ๋นํ ์ด์ ๋ฅผ ์ค๋ช ํด์ผ ํฉ๋๋ค.
2. ATS ์์ธ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
HTTP์ธ ๊ฒฝ์ฐ
- ๋ชจ๋ HTTP ํต์ ํ์ฉ: NSAllowsArbitraryLoads - YES ์ค์
์ํธํ ํ์ง ์์ ํต์ ์ด๋ฏ๋ก ๋ถ๊ฐํผํ ๋ ์ธ์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ผ๋ฉฐ ๋ฐฐํฌํ์ง ์์ ๋๋ง ์ฌ์ฉํ์.
- ATS์์ ์ ์ธํ ํน์ ๋๋ฉ์ธ ์ง์ : Exception Domains - ์ฐ๊ฒฐ์ด ํ์ํ ๋๋ฉ์ธ ์ถ๊ฐ
a. ํ๋จ์ ์ด๋ฏธ์ง์ฒ๋ผ ๋๋ฉ์ธ์ ๋์ ๋๋ฆฌ๋ก ์์ ํ๊ณ , NSTemporaryExceptionAllowsInsecureHTTPLoads์ ๊ฐ์ YES๋ก ์ค์ ํด์ค์ผ ํฉ๋๋ค.
b. ๋ง์ฝ sub domain๊น์ง ์์ธ์ ํฌํจํ๋ ค๋ฉด "www"๋ฅผ ์ง์ฐ๊ณ ๋์ ๋๋ฆฌ๋ฅผ ํ๋จ์ ์ด๋ฏธ์ง์ฒ๋ผ NSIncludesSubdomains๋ฅผ YES๋ก ์ค์ ํฉ๋๋ค.
Info.plist์ฉ ํค๋ฅผ ์์ธํ ๋ณด๋ ค๋ฉด ๋๋ณด๊ธฐ๋ฅผ ํ์ธํด์ฃผ์ธ์.
info.plist์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฌ๋ฌ ํค์ ์์ธํ ์ค๋ช
์ ์ฌ์ดํธ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค > "์ฌ๊ธฐ"
- NSAppTransportSecurity (Dictionary)
- NSAllowsArbitraryLoads (Bool)
- NSAllowsArbitraryLoadsForMedia(Bool)
- NSAllowsArbitraryLoadsInWebContent(Bool)
- NSAllowsLocalNetworking(Bool)
- NSExceptionDomains (Dictionary)
- <domain-name-for-exception-as-string> (Dictionary)
- NSExceptionMinimumTLSVersion (String)
- NSExceptionRequiresForwardSecrecy (Bool)
- NSExceptionAllowsInsecureHTTPLoads (Bool)
- NSRequiresCertificateTransparency (Bool)
- NSIncludesSubdomains (Bool)
- NSThirdPartyExceptionMinimumTLSVersion (String)
- NSThirdPartyExceptionRequiresForwardSecrecy (Bool)
- NSThirdPartyExceptionAllowsInsecureHTTPLoads (Bool)
- <domain-name-for-exception-as-string> (Dictionary)
HTTPS์ธ ๊ฒฝ์ฐ(TLS ๋ฒ์ ์ด ๋ฎ์ ๊ฒฝ์ฐ)
ํฐ๋ฏธ๋์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค. Domain์ ๋๋ฉ์ธ URL์ ์ ๋ ฅํด์ฃผ๋ฉด ๋ฉ๋๋ค.
nscurl -- ats diagnostics Domain --verbose
nscurl -- ats diagnostics https://www.tistory.com --verbose (์์)
๋์ค๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ "RESULT: Fail"์ธ ๋ถ๋ถ์ ์ฐธ๊ณ ํด ํ์ํ ์ต์ ์ ์ค์ ํด์ฃผ๋ฉด ๋๋ค๋๋ฐ,
์ด๋ ์์ง ํด๋ณด์ง ์์์ผ๋ฏ๋ก,, ๋์ค์ ์ถ๊ฐํ๊ฒ ๋ค..!
3. ์ฑ์คํ ์ด ๋ฐฐํฌ ์ ์ ๋นํ๊ฐ ํ์ํ ์์ธ์ ์ ๋น์ฑ์ ์์
์ฑ Information Property Listํ์ผ์ ํน์ ATS ์์ธ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ ๋น์ฑ์ ์ ๊ณตํด์ผ ํ๋ฉฐ ์ฑ์ ๋ํ ์ถ๊ฐ App Store ๊ฒํ ๊ฐ ํ์ํ๊ฒ ๋ ์ ์์ต๋๋ค. ์ฑ ์ฌ์ฌ๋ฅผ ์ ์ถํ ๋ ์ฑ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ ์ฐ๊ฒฐ์ ์ค์ ํ ์ ์๋ ์ด์ ๋ฅผ ํ์ธํ ์ ์๋๋ก App Store์ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ผ ํฉ๋๋ค.
์ ๋นํ๊ฐ ํ์ํ ์์ธ
- ์์ ์ฐ๊ฒฐ ์์ธ(NSAllowsArbitraryLoads)
- ๋ฏธ๋์ด ์คํธ๋ฆฌ๋ฐ ์์ธ(NSAllowsArbitraryLoadsForMedia)
- ์น ์ฝํ ์ธ ๋ก๋(NSAllowsArbitraryLoadsInWebContent)
- ๋๋ฉ์ธ๋ณ ๋น๋ณด์ ์ฐ๊ฒฐ(NSExceptionAllowsInsecureHTTPLoads)
- ๋๋ฉ์ธ๋น ์ต์ TLS ๋ฒ์ (NSExceptionMinimumTLSVersion)
๊ณ ๋ คํ ์ ์๋ ์ ๋น์ฑ์ ์์
- ์ฑ์ ๋ณด์ ์ฐ๊ฒฐ์ ์ง์ํ์ง ์๋ ๋ค๋ฅธ ์ํฐํฐ์์ ๊ด๋ฆฌํ๋ ์๋ฒ์ ์ฐ๊ฒฐํด์ผ ํฉ๋๋ค.
- ์ฑ์ ๋ณด์ ์ฐ๊ฒฐ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ ๊ทธ๋ ์ด๋ํ ์ ์๊ณ ๊ณต๊ฐ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ์ฌ ์ก์ธ์คํด์ผ ํ๋ ์ฅ์น์ ๋ํ ์ฐ๊ฒฐ์ ์ง์ํด์ผ ํฉ๋๋ค.
- ์ฑ์ ๋ค์ํ ์์ค์์ ํฌํจ๋ ์น ์ฝํ ์ธ ๋ฅผ ํ์ํด์ผ ํ์ง๋ง ์น ์ฝํ ์ธ ์์ธ์์ ์ง์ํ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฑ์ ์ํธํ๋์ด ์๊ณ ๊ฐ์ธํ๋ ์ ๋ณด๊ฐ ํฌํจ๋์ง ์์ ๋ฏธ๋์ด ์ฝํ ์ธ ๋ฅผ ๋ก๋ํฉ๋๋ค.
์ถ์ฒ
https://developer.apple.com/documentation/security/preventing_insecure_network_connections
https://nopdin.tistory.com/1818
https://leibniz55.tistory.com/entry/ATS-%EC%98%B5%EC%85%98-%EC%84%A4%EC%A0%95%EB%B2%95
์ฌ์ค๊ณผ ๋ค๋ฅธ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์ ๐๐ปโ๏ธ
'๐ Apple > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] ReactorKit ๋ค์ฌ๋ค๋ณด๊ธฐ (0) | 2024.05.17 |
---|---|
[iOS] Alamofire๋ก Multipart ์ด๋ฏธ์ง ํต์ ํ๊ธฐ | post | Swift (0) | 2024.02.13 |
[iOS] ํ์ด์ด๋ฒ ์ด์ค ๊ตฌ๊ธ ๋ก๊ทธ์์/ํ์ํํด | Swift | Firebase Google Login (0) | 2024.01.13 |
[iOS] ๊ฐ๋ฐํ ๋ ์ ์ฉํ ์ฌ์ดํธ ๋ชจ์ ๐ (0) | 2023.12.31 |
[iOS] Singleton ํจํด์ ํ์ฉํ๋ ๊ฒฝ์ฐ (0) | 2023.12.21 |