Java 我找到了一个https客户端来使用webservice;此客户端使用的是双向SSL还是单向SSL?
不知道你说的单向或双向是什么意思。。。如果建立了SSL网络连接,它将以两种方式(请求和响应)进行加密 但是,如果您的问题是针对方向的,如果只有服务器经过身份验证,或者客户端也经过身份验证,那么您的代码似乎同时完成了这两个任务。如果只使用服务器证书,则不需要客户机密钥库配置。服务器公钥必须包含在信任存储中。通常不需要客户端身份验证(例如,当您通过https从服务器请求网页时)Java 我找到了一个https客户端来使用webservice;此客户端使用的是双向SSL还是单向SSL?,java,web-services,apache,ssl,Java,Web Services,Apache,Ssl,不知道你说的单向或双向是什么意思。。。如果建立了SSL网络连接,它将以两种方式(请求和响应)进行加密 但是,如果您的问题是针对方向的,如果只有服务器经过身份验证,或者客户端也经过身份验证,那么您的代码似乎同时完成了这两个任务。如果只使用服务器证书,则不需要客户机密钥库配置。服务器公钥必须包含在信任存储中。通常不需要客户端身份验证(例如,当您通过https从服务器请求网页时) package demo.hw_https.client; import java.io.File; import ja
package demo.hw_https.client;
import java.io.File; import java.io.FileInputStream; import
java.io.FileNotFoundException; import java.io.IOException; import
java.net.URL; import java.security.GeneralSecurityException; import
java.security.KeyStore; import java.security.KeyStoreException; import
java.security.NoSuchAlgorithmException;
import javax.net.ssl.KeyManager; import
javax.net.ssl.KeyManagerFactory; import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory; import
javax.xml.namespace.QName;
import org.apache.cxf.configuration.jsse.TLSClientParameters; import
org.apache.cxf.frontend.ClientProxy; import
org.apache.cxf.transport.http.HTTPConduit; import
org.apache.hello_world_soap_http.Greeter; import
org.apache.hello_world_soap_http.SOAPService;
public final class ClientNonSpring {
private static final QName SERVICE_NAME
= new QName("http://apache.org/hello_world_soap_http", "SOAPService");
private static final QName PORT_NAME =
new QName("http://apache.org/hello_world_soap_http", "SoapPort");
private ClientNonSpring() {
}
public static void main(String args[]) throws Exception {
if (args.length == 0) {
System.out.println("please specify wsdl");
System.exit(1);
}
URL wsdlURL;
File wsdlFile = new File(args[0]);
if (wsdlFile.exists()) {
wsdlURL = wsdlFile.toURI().toURL();
} else {
wsdlURL = new URL(args[0]);
}
System.out.println(wsdlURL);
SOAPService ss = new SOAPService(wsdlURL, SERVICE_NAME);
Greeter port = ss.getPort(PORT_NAME, Greeter.class);
if ("secure".equals(args[1])) {
setupTLS(port);
} else if ("insecure".equals(args[1])) {
//do nothing
} else {
System.out.println("arg1 needs to be either secure or insecure");
System.exit(1);
}
System.out.println("Invoking greetMe...");
try {
String resp = port.greetMe(System.getProperty("user.name"));
System.out.println("Server responded with: " + resp);
System.out.println();
} catch (Exception e) {
System.out.println("Invocation failed with the following: " + e.getCause());
System.out.println();
}
System.exit(0);
}
private static void setupTLS(Greeter port)
throws FileNotFoundException, IOException, GeneralSecurityException {
String keyStoreLoc = "src/main/config/clientKeystore.jks";
HTTPConduit httpConduit = (HTTPConduit) ClientProxy.getClient(port).getConduit();
TLSClientParameters tlsCP = new TLSClientParameters();
String keyPassword = "ckpass";
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(new FileInputStream(keyStoreLoc), "cspass".toCharArray());
KeyManager[] myKeyManagers = getKeyManagers(keyStore, keyPassword);
tlsCP.setKeyManagers(myKeyManagers);
KeyStore trustStore = KeyStore.getInstance("JKS");
trustStore.load(new FileInputStream(keyStoreLoc), "cspass".toCharArray());
TrustManager[] myTrustStoreKeyManagers = getTrustManagers(trustStore);
tlsCP.setTrustManagers(myTrustStoreKeyManagers);
httpConduit.setTlsClientParameters(tlsCP);
}
private static TrustManager[] getTrustManagers(KeyStore trustStore)
throws NoSuchAlgorithmException, KeyStoreException {
String alg = KeyManagerFactory.getDefaultAlgorithm();
TrustManagerFactory fac = TrustManagerFactory.getInstance(alg);
fac.init(trustStore);
return fac.getTrustManagers();
}
private static KeyManager[] getKeyManagers(KeyStore keyStore, String keyPassword)
throws GeneralSecurityException, IOException {
String alg = KeyManagerFactory.getDefaultAlgorithm();
char[] keyPass = keyPassword != null
? keyPassword.toCharArray()
: null;
KeyManagerFactory fac = KeyManagerFactory.getInstance(alg);
fac.init(keyStore, keyPass);
return fac.getKeyManagers();
}
}