인증서 다운 받기


인증서를 이클립스/인텔리제이에서 사용중인 자바 \Java\jdk1.8.0_202\jre\lib\security\ 경로에 저장

인증서 공개키 저장
# alias 별칭
# storepass 저장암호. 기본은 changeit
keytool -import -alias dict -keystore "C:\Program Files\Java\jdk1.8.0_202\jre\lib\security\cacerts" -storepass changeit -file dict.cer
package test;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
public class ApiTest {
public static void main(String[] args) throws IOException, NoSuchAlgorithmException, KeyManagementException {
String htmlUrl = "https://krdict.korean.go.kr/api/search";
// ============= 인증서 허용 코드 =================
TrustManager[] trustAllCerts = new TrustManager[] {
(TrustManager) new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
}
};
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// ============= /인증서 허용 코드 =================
StringBuilder urlBuilder = new StringBuilder(htmlUrl); /*URL*/
urlBuilder.append("?" + URLEncoder.encode("certkey_no","UTF-8") + "=인증서 키 번호"); /*cert Key*/
urlBuilder.append("&" + URLEncoder.encode("key","UTF-8") + "=" + URLEncoder.encode("발급받은 키 입력", "UTF-8")); /*Service Key*/
urlBuilder.append("&" + URLEncoder.encode("type_search","UTF-8") + "=" + URLEncoder.encode("search", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("part","UTF-8") + "=" + URLEncoder.encode("word", "UTF-8"));
urlBuilder.append("&" + URLEncoder.encode("q","UTF-8") + "=" + URLEncoder.encode("%EB%82%98%EB%AC%B4", "UTF-8")); /*Service Key*/
urlBuilder.append("&" + URLEncoder.encode("sort","UTF-8") + "=" + URLEncoder.encode("dict", "UTF-8"));
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
System.out.println("Response code: " + conn.getResponseCode());
BufferedReader rd;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
}
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
System.out.println(sb.toString());
}
}

https://jinhokwon.github.io/devops/devops-java/
https://stackoverflow.com/questions/21076179/pkix-path-building-failed-and-unable-to-find-valid-certification-path-to-requ
// SSL에 대한 정리를 잘해둔 곳이다
https://wayhome25.github.io/cs/2018/03/11/ssl-https/
https://opentutorials.org/course/228/4894