Java에서 JAX-WS 클라이언트를 프로그래밍하고 있습니다. WebService에 대한 액세스는 클라이언트 인증서로 보호됩니다. 클라이언트 인증서를 가져온 경우에만 Firefox에서 WSDL을 가져올 수 있기 때문에 클라이언트 인증서가 옳다는 것을 알고 있습니다 (Firefox).JAX-WS 클라이언트 및 클라이언트 인증서 인증에서 클라이언트 인증서를 지정하는 방법
하지만 WebService를 사용해야하는 Java 응용 프로그램을 작성하는 데 문제가 있습니다. 내가 한 일은 다음과 같습니다 :
MyOwnService svc = new MyOwnService(getServerURL(), MYOWNSERVICE_QNAME);
...
...
private URL getServerURL() throws IOException {
URL url = new URL((String) cfg.get(ConfigData.SERVER_URL));
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
try {
con.setSSLSocketFactory(getFactory(new File("/etc/pki/wildfly/client.keystore"), "123456"));
} catch (Exception exc) {
throw new IOException("Client certificate error!", exc);
}
return url;
}
private SSLSocketFactory getFactory(File pKeyFile, String pKeyPassword)
throws ... {
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream keyInput = new FileInputStream(pKeyFile);
keyStore.load(keyInput, pKeyPassword.toCharArray());
keyInput.close();
keyManagerFactory.init(keyStore, pKeyPassword.toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());
return context.getSocketFactory();
}
그러나 이것은 작동하지 않았습니다. 나는 MyOwnService
생성자
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty.
이 난 다음받을 예외를 실행하면 어떻게 클라이언트 인증을 지원하는 JAX-WS 클라이언트를 implemnting하는 올바른 방법은 무엇입니까?