๊ด€๋ฆฌ ๋ฉ”๋‰ด

GO SIWOO!

[SpringBoot] - PKIX path building failed ์—๋Ÿฌ ๋ณธ๋ฌธ

Develop/SpringBoot

[SpringBoot] - PKIX path building failed ์—๋Ÿฌ

gosiwoo 2022. 6. 24. 11:22

๐Ÿ“Œ์—๋Ÿฌ

 ์›น ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋Š”์ค‘ ํ•œ๊ธ€ ๋‹จ์–ด์˜ ๋œป์„ ๋ฐ›๊ธฐ์œ„ํ•ด ํ•œ๊ตญ์–ด ๊ธฐ์ดˆ์‚ฌ์ „ OpenAPI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ํ•˜์˜€๋Š”๋ฐ ํ•œ๋™์•ˆ ์ž˜ ์‚ฌ์šฉ์„ ํ•˜๋‹ค ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ ๋ฌธ๊ตฌ๊ฐ€ ๋œจ๊ณ  Postman์„ ์‚ฌ์šฉํ•ด ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„๋กœ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์„ ์‚ดํŽด๋ณด๋‹ˆ ์•„๋ฌด ๊ฐ’๋„ ๋ฆฌํ„ดํ•˜๊ณ  ์žˆ์ง€ ์•Š์•˜๋‹ค.

 

PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

 

 ๋‹น์žฅ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰์‹œํ‚ค๋Š”๋ฐ ์žˆ์–ด์„œ ์–ด๋–ป๊ฒŒ๋“  ๊ธฐ๋Šฅ์ด๋ผ๋„ ๊ตฌํ˜„์„ ํ•ด์•ผํ–ˆ๋‹ค. ์—๋Ÿฌ์˜ ์ด๋ฅ˜๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ SSL ์ธ์ฆ์„œ์˜ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค HTTPS ํ†ต์‹ ์—์„œ ์‚ฌ์šฉํ•˜๋Š” SSL์€ ์›น ์„œ๋ฒ„์— ์„ค์น˜๋œ ์ธ์ฆ์„œ์ธ๋ฐ ์ด ์ธ์ฆ์„œ๊ฐ€ ์ œ๋Œ€๋กœ ๋ฐœ๊ธ‰๋ฐ›์€ ๊ฒƒ์ธ์ง€, ๊ณต๊ฐœํ‚ค์˜ ๋ชฉ๋ก์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์•„ ์‹ ๋ขฐํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

 

 


๐Ÿ“Œํ•ด๊ฒฐ์ฑ…

 ๋จผ์ € ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€๋ฐ

1.API ํ˜ธ์ถœ ์ฃผ์†Œ, ์ธ์ฆํ‚ค์™€ API ํ˜ธ์ถœ ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ๋ฅผ String ํ˜• ๋ณ€์ˆ˜์— ๋‹ด๋Š”๋‹ค.

2. ๋จผ์ € ์ƒ์„ฑํ•œ String ํ˜• ๋ณ€์ˆ˜๋ฅผ JAVA URL ํด๋ž˜์Šคํ˜• ๋ณ€์ˆ˜๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค.

3. JAVA ๋‚ด์—์„œ SSL ์ ์šฉ๋œ ์‚ฌ์ดํŠธ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด, ์ฆ‰ API๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด HttpURLConnection์„ ์„ ์–ธํ•˜๊ณ  ๋จผ์ € ์ƒ์„ฑํ•œ URL ๋ณ€์ˆ˜๋ฅผ ์บ์ŠคํŒ…ํ•ด ๋„ฃ์–ด์ค€๋‹ค.

4. API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ฐ›์€ ๊ฐ’์„ BufferReader๋กœ ๋ฐ›์•„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•œ ํ›„ ์š”์ฒญํ•œ ํ”„๋ก ํŠธ์—”๋“œ ์„œ๋ฒ„๋กœ ๋ฆฌํ„ด์„ ํ•ด์ค€๋‹ค.

 

 ์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ ์„œ๋น„์Šค๊ฐ€ ์ง„ํ–‰์ด ๋˜๋Š”๋ฐ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š” ํ–ˆ์œผ๋ฏ€๋กœ ๊ธ‰ํ•œ๋Œ€๋กœ ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„ ๋ณด์•˜๋Š”๋ฐ ์œ„์˜ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ˆœ์„œ ์ „์— SSL ์ธ์ฆ์„œ๋ฅผ ๋ฌด์‹œํ•œ ํ›„ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์—ˆ๋‹ค.

 

 ๋จผ์ € ์ด ๋ฐฉ๋ฒ•์€ ๋ณด์•ˆ์—์„œ์˜ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‹จ์ˆœ ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ๋งŒ ์‚ฌ์šฉ์„ ํ•ด์•ผํ•œ๋‹ค.

 

public void sslTrustAllCerts() {
		TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
			public X509Certificate[] getAcceptedIssuers() {
				return null;
			}

			public void checkClientTrusted(X509Certificate[] certs, String authType) {
			}

			public void checkServerTrusted(X509Certificate[] certs, String authType) {
			}
		} };
		SSLContext sc;
		try {
			sc = SSLContext.getInstance("SSL");
			sc.init(null, trustAllCerts, new SecureRandom());
			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

 ์œ„์™€๊ฐ™์€ SSL์„ ๋ฌด์‹œํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” API๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

 

 

 Postman์„ ํ†ตํ•ด์„œ ํ™•์ธํ–ˆ์„ ๋•Œ ๊ฐ€๊ณต๋œ ๋ฐ์ดํ„ฐ๋กœ ๋ฆฌํ„ด์„ ํ•ด์ค€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ผ๋‹จ ์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด ๋‘” ํ›„ ๋ณด์•ˆ์ด์Šˆ๊ฐ€ ์—†๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ”๊ฟ”๊ฒ ๋‹ค...