JavaでJAX-WSクライアントをプログラミングしています。 WebServiceへのアクセスは、クライアント証明書で保護されています。クライアント証明書がインポートされた場合にのみ(Firefoxで)、FirefoxでWSDLを取得できるため、クライアント証明書が正しいことが分かります。JAX-WSクライアントとクライアント証明書認証でクライアント証明書を指定する方法
しかし、私はWebサービスを使用する必要がある私の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する正しい方法は何ですか?