2016-06-17 32 views
0

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する正しい方法は何ですか?

答えて

0

上記のコードを忘れてしまった。私は、それが動作する正しいキーストアを指定した場合は

-Djavax.net.ssl.keyStore=/etc/pki/wildfly/client.keystore -Djavax.net.ssl.keyStorePassword=123456 

:ようですが、あなたがしなければならない唯一のもののような環境変数としてキーストアを指定することであるということです。無効なキーストアファイル(他の/間違った証明書/キーを含む)を指定すると、動作しません。

しかし、キーストアに1つ以上のキーストアが含まれていると、Javaが正しいキー/証明書をキーストアから取得する方法がわかりません。PrivateKeyEntryjavax.net.ssl.keyStoreAliasを指定しても効果はありません。適切なものが見つかるまでJavaがPrivateKeyEntryを試行する可能性があります。

ただし、唯一行うべきことは、環境変数として正しいキーストアを指定することです。

関連する問題