gpt4 book ai didi

java - 我找到了一个 https 客户端来使用 web 服务;此客户端使用的是 2 向还是 1 向 SSL?

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:39 25 4
gpt4 key购买 nike

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();
}

}

最佳答案

不确定您所说的一种方式或两种方式是什么意思...如果建立了 SSL 网络连接,它将以两种方式(请求和响应)进行加密。

但是如果你的问题是针对方向的,如果只有服务器被认证或者客户端也被认证,那么你的代码看起来就像是两者兼而有之。如果只使用服务器证书,则不需要客户端 keyStore 配置。服务器公钥必须包含在信任库中。通常不需要客户端身份验证(例如,当您通过 https 从服务器请求网页时)。

关于java - 我找到了一个 https 客户端来使用 web 服务;此客户端使用的是 2 向还是 1 向 SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20472624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com