RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815: HTTPS \uc694\uccad \ubcf4\uc548 \uac15\ud654<\/p>\n
HTTP \uc694\uccad\uc744 \uc804\uc1a1\ud558\ub294 RestTemplate\ub294 \ubcf4\uc548\uc131\uc744 \uac15\ud654\ud558\uae30 \uc704\ud574 HTTPS \ud504\ub85c\ud1a0\ucf5c\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. HTTPS\ub294 SSL\/TLS \ud504\ub85c\ud1a0\ucf5c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud1b5\uc2e0\ud558\ub294\ub370, \uc774\ub294 \ud3c9\ubb38 \ud1b5\uc2e0\ubcf4\ub2e4 \ub354\uc6b1 \uc548\uc804\ud55c \ubc29\uc2dd\uc785\ub2c8\ub2e4. RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815\uc744 \uad6c\uc131\ud558\uba74 HTTPS \uc694\uccad\uc744 \uc548\uc804\ud558\uac8c \uc804\uc1a1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc774 \uae00\uc5d0\uc11c\ub294 RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815\uc744 \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uacfc \ubb38\uc81c \ud574\uacb0 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n
RestTemplate\uc740 Spring \ud504\ub808\uc784\uc6cc\ud06c\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 HTTP \ud074\ub77c\uc774\uc5b8\ud2b8 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4. RestTemplate\uc744 \uc0ac\uc6a9\ud558\uba74 HTTP \uc694\uccad\uc744 \uc27d\uac8c \uc804\uc1a1\ud560 \uc218 \uc788\uc73c\uba70, HTTP \uc694\uccad\uc744 \ubcf4\ub0bc \ub54c SSL\/TLS \ud504\ub85c\ud1a0\ucf5c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud1b5\uc2e0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
SSL\/TLS \ud504\ub85c\ud1a0\ucf5c\uc740 \uc778\uc99d\uc11c\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc11c\ubc84\uc758 \uc2e0\ub8b0\uc131\uc744 \ubcf4\uc7a5\ud558\uace0, \ub370\uc774\ud130\uc758 \uae30\ubc00\uc131\uacfc \ubb34\uacb0\uc131\uc744 \ubcf4\ud638\ud569\ub2c8\ub2e4. RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815\uc744 \uad6c\uc131\ud558\uba74 HTTPS \ud504\ub85c\ud1a0\ucf5c\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc548\uc804\ud558\uac8c \ud1b5\uc2e0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
RestTemplate\uc5d0\uc11c HTTPS \uc694\uccad\uc744 \ubcf4\ub0b4\uae30 \uc704\ud574\uc11c\ub294 SSL\/TLS \ud504\ub85c\ud1a0\ucf5c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud1b5\uc2e0\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574\uc11c\ub294 \uc778\uc99d\uc11c\uc640 \ud0a4 \ud30c\uc77c\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc778\uc99d\uc11c\uc640 \ud0a4 \ud30c\uc77c\uc740 \uc11c\ubc84\uc5d0\uc11c \ubc1c\uae09\ubc1b\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
RestTemplate\uc5d0\uc11c HTTPS \uc694\uccad\uc744 \ubcf4\ub0b4\uae30 \uc704\ud574\uc11c\ub294 \uc778\uc99d\uc11c\uc640 \ud0a4 \ud30c\uc77c\uc744 \ub85c\ub4dc\ud558\uace0, SSLContext\ub97c \uc0dd\uc131\ud558\uc5ec RestTemplate\uc5d0 \uc124\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. SSLContext\ub97c \uc0dd\uc131\ud558\ub294 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n
KeyStore keyStore = ... \/\/ load the key store\nKeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());\nkmf.init(keyStore, \"password\".toCharArray());\nTrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());\ntmf.init(keyStore);\nSSLContext sslContext = SSLContext.getInstance(\"TLS\");\nsslContext.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);<\/code><\/pre>\n\uc774\uc81c RestTemplate\uc5d0 SSLContext\ub97c \uc124\uc815\ud558\uba74 HTTPS \uc694\uccad\uc744 \ubcf4\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
RestTemplate restTemplate = new RestTemplate();\nHttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();\nrequestFactory.setHttpClient(HttpClients.custom().setSSLContext(sslContext).build());\nrestTemplate.setRequestFactory(requestFactory);<\/code><\/pre>\nRestTemplate\uc5d0\uc11c\uc758 SSL\/TLS \uad6c\uc131\uacfc \ubb38\uc81c \ud574\uacb0<\/h2>\n
RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815\uc744 \uad6c\uc131\ud558\ub294 \uac83\uc740 \uac04\ub2e8\ud558\uc9c0\ub9cc, \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc77c\ubd80 \uc11c\ubc84\uc5d0\uc11c\ub294 \uc778\uc99d\uc11c \uac80\uc99d\uc744 \ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, RestTemplate\uc5d0\uc11c HTTPS \uc694\uccad\uc744 \ubcf4\ub0bc \ub54c \uc778\uc99d\uc11c \uac80\uc99d\uc774 \ud544\uc694 \uc5c6\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc774 \uacbd\uc6b0\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 TrustManager\ub97c \uad6c\uc131\ud558\uc5ec \uc778\uc99d\uc11c \uac80\uc99d\uc744 \ud558\uc9c0 \uc54a\ub3c4\ub85d \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
TrustManager[] trustAllCerts = new TrustManager[]{\n new X509TrustManager() {\n public X509Certificate[] getAcceptedIssuers() {\n return null;\n }\n public void checkClientTrusted(X509Certificate[] certs, String authType) {\n }\n public void checkServerTrusted(X509Certificate[] certs, String authType) {\n }\n }\n};\nSSLContext sslContext = SSLContext.getInstance(\"TLS\");\nsslContext.init(null, trustAllCerts, null);<\/code><\/pre>\n\ub610\ud55c, RestTemplate\uc5d0\uc11c HTTPS \uc694\uccad\uc744 \ubcf4\ub0bc \ub54c \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \ubb38\uc81c \uc911 \ud558\ub098\ub294 SSLHandshakeException\uc785\ub2c8\ub2e4. \uc774 \ubb38\uc81c\ub294 \uc77c\ubd80 \uc11c\ubc84\uc5d0\uc11c SSL\/TLS \ubc84\uc804\uc774 \ub0ae\uac70\ub098, \uc554\ud638\ud654 \uc54c\uace0\ub9ac\uc998\uc774 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc744 \ub54c \ubc1c\uc0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
\uc774 \uacbd\uc6b0\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 SSLContext\ub97c \uc0dd\uc131\ud558\uc5ec SSL\/TLS \ubc84\uc804\uacfc \uc554\ud638\ud654 \uc54c\uace0\ub9ac\uc998\uc744 \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
SSLContext sslContext = SSLContexts.custom()\n .setProtocol(\"TLSv1.2\")\n .build();<\/code><\/pre>\n\uc774\uc640 \uac19\uc774 RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815\uc744 \uad6c\uc131\ud558\uba74 HTTPS \uc694\uccad\uc744 \uc548\uc804\ud558\uac8c \uc804\uc1a1\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n
RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815\uc744 \uad6c\uc131\ud558\ub294 \uac83\uc740 \ubcf4\uc548\uc131\uc744 \ub192\uc774\uae30 \uc704\ud574 \ubc18\ub4dc\uc2dc \ud544\uc694\ud55c \uc791\uc5c5\uc785\ub2c8\ub2e4. HTTPS\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud1b5\uc2e0\ud558\uba74 \uc911\uac04\uc790 \uacf5\uaca9 \ub4f1\uc758 \ubcf4\uc548 \uc704\ud611\uc73c\ub85c\ubd80\ud130 \uc548\uc804\ud558\uac8c \ub370\uc774\ud130\ub97c \ubcf4\ud638\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815\uc744 \uad6c\uc131\ud558\ub294 \ubc29\ubc95\uacfc \ubb38\uc81c \ud574\uacb0 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. RestTemplate\uc744 \uc0ac\uc6a9\ud558\ub294 \uac1c\ubc1c\uc790\ub77c\uba74 HTTPS \uc694\uccad\uc744 \ubcf4\ub0bc \ub54c \ubc18\ub4dc\uc2dc SSL\/TLS \uc124\uc815\uc744 \uad6c\uc131\ud558\ub3c4\ub85d \ud558\uc138\uc694.<\/p>\n","protected":false},"excerpt":{"rendered":"
RestTemplate\uc5d0\uc11c SSL\/TLS \uc124\uc815: HTTPS \uc694\uccad \ubcf4\uc548 \uac15\ud654<\/p>\n","protected":false},"author":1,"featured_media":12633,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1957],"tags":[2459,2457,45,2188,2156],"class_list":["post-25183","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","tag-custom","tag-load","tag-new","tag-public","tag-spring"],"acf":[],"_links":{"self":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/25183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/comments?post=25183"}],"version-history":[{"count":0,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/posts\/25183\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media\/12633"}],"wp:attachment":[{"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/media?parent=25183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/categories?post=25183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/m9js.shop\/blog\/wp-json\/wp\/v2\/tags?post=25183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}