感謝を。ブラウザでwebservice URLを開こうとすると、クライアント証明書が要求されました。つまり、すでにjvmのサーバ証明書をjssecacert
にインポートしていたため、クライアントにクライアント証明書がありませんでした。したがって、javax.net.ssl.trustStore
とjavax.net.ssl.trustStorePassword
プロパティを設定する代わりに、javax.net.ssl.keyStore
とjavax.net.ssl.keyStorePassword
プロパティを設定して正常に動作しています。秘密鍵と証明書がキーストアにインポートされる前に私は逃しました。 ImportKey
は、基本的にクライアント証明書であり、私はそれがサーバー証明書であると言っている人から長い時間をかけて受け取りました。それは私を誤解していました。ですから、もし誰かがそれを探しているなら、私は解決策を要約しましょう。
サーバ証明書をダウンロードし、システムパス上のJVM cacertsまたはjssecacertsにインポートします。 私はthis postを使用しました。
ブラウザでwebservice URLを開き、クライアント証明書を要求すると、クライアントからの証明書を要求するようにサーバーが設定されていることを意味します。自己署名証明書の場合は、サーバーからの自己署名証明書をすでに持っている必要があります。これらをキーストアにインポートし、キーストアのシステムプロパティを設定します。実際には以下のようにWebサービスを呼び出す前にトラストストアは設定しないでください。これは、すでにクライアント証明書ストア(cacerts
)にサーバー証明書をインポートしているためです。
コード:私の場合はさらに
MySoap12Stub stub = (MySoap12Stub) new MyLocator().getMySoap12(new java.net.URL(WSUrl));
System.setProperty("javax.net.ssl.keyStore", "certs/keystoreQA.Importkey");
System.setProperty("javax.net.ssl.keyStorePassword", "importkey");
、サーバーは、SOAPヘッダに設定されたユーザートークンとパスワードを期待しています。これは私がSOAPヘッダにこれを設定する方法である:
((Stub) stub).setHeader(HeaderHandler.getSecurityHeader(User, password));
public class HeaderHandler {
public static SOAPHeaderElement getSecurityHeader(String user,String password) throws Exception {
SOAPHeaderElement wsseSecurity = new SOAPHeaderElement(new PrefixedQName(
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
"Security", "wsse"));
wsseSecurity.setActor(null);
wsseSecurity.setMustUnderstand(true);
SOAPElement usernameToken = wsseSecurity.addChildElement("UsernameToken", "wsse");
usernameToken.setAttribute("xmlns:wsu","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
SOAPElement username = usernameToken.addChildElement("Username", "wsse");
username.addTextNode(user);
SOAPElement password = usernameToken.addChildElement("Password", "wsse");
password.setAttribute("Type","http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
password.addTextNode(password);
return wsseSecurity;
}
}
私は、これははUserTokenとパスワードを使用して、HTTPSを介してWebサービスを呼び出すのAxis2クライアントでトークンとパスワード、自己署名証明書を使用する方法の詳細とWSSEユーザーに説明したいと考えています。
乾杯!今行くには良いです。