Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过SSL/TLS下载Apache CXF wsdl_Java_Ssl_Wsdl_Cxf_Client Certificates - Fatal编程技术网

Java 通过SSL/TLS下载Apache CXF wsdl

Java 通过SSL/TLS下载Apache CXF wsdl,java,ssl,wsdl,cxf,client-certificates,Java,Ssl,Wsdl,Cxf,Client Certificates,我有一个cxf服务正在运行 https://localhost:8443/services/MyService?wsdl 需要客户端证书。WSDL在这里并不重要 当我删除客户端证书或https要求时,我能够调用该服务 服务和客户机类是使用cxf wsdl2java实用工具生成的。 下面是MyService.class: package.com.mycompany; 导入java.net.URL; 导入java.util.logging.Level; 导入java.util.logging.L

我有一个cxf服务正在运行

https://localhost:8443/services/MyService?wsdl
需要客户端证书。WSDL在这里并不重要

当我删除客户端证书或https要求时,我能够调用该服务

服务和客户机类是使用cxf wsdl2java实用工具生成的。

下面是MyService.class:

package.com.mycompany;
导入java.net.URL;
导入java.util.logging.Level;
导入java.util.logging.Logger;
导入javax.xml.namespace.QName;
导入javax.xml.ws.Service;
导入javax.xml.ws.WebEndpoint;
导入javax.xml.ws.WebServiceClient;
导入javax.xml.ws.WebServiceFeature;
/**
*此类由Apache CXF 2.7.3 2013-03-29T13:59:37.423-03:00生成源版本:2.7.3生成
*/
@WebServiceClient(name=“MyService”,wsdlLocation=“MyService.wsdl”,targetNamespace=”http://server/schemas/services")
公共类MyService扩展服务{
公共最终静态URL WSDL_位置;
公共最终静态QName服务=新QName(“http://server/schemas/services“,“我的服务”);
公共最终静态QName MyServicePort=新QName(“http://server/schemas/services“,“MyServicePort”);
静止的{
URL=MyService.class.getResource(“MyService.wsdl”);
如果(url==null){
Logger.getLogger(MyService.class.getName()).log(Level.INFO,“无法从{0}”初始化默认wsdl”,“MyService.wsdl”);
}
WSDL_LOCATION=url;
}
公共MyService(URL wsdlLocation){
超级(wsdlLocation,SERVICE);
}
公共MyService(URL wsdlLocation、QName serviceName){
超级(wsdlLocation,serviceName);
}
公共MyService(){
super(WSDL_位置、服务);
}
/**
* 
*@return返回EncaminHarmensagePortType
*/
@WebEndpoint(name=“MyServicePort”)
公共MyServicePortType getMyServicePort(){
返回super.getPort(MyServicePort,MyServicePortType.class);
}
/**
* 
*@param功能
*要在代理上配置的{@link javax.xml.ws.WebServiceFeature}列表。支持的功能不在
*
功能
参数将具有其默认值。 *@return返回EncaminHarmensagePortType */ @WebEndpoint(name=“MyServicePort”) 公共MyServicePortType getMyServicePort(WebServiceFeature…功能){ 返回super.getPort(MyServicePort、MyServicePortType.class、features); } }
这是我没有客户证书要求的客户:(工作正常)

package.com.mycompany;
导入java.net.URL;
导入javax.xml.namespace.QName;
进口com.mycompany.IdHolder;
导入com.mycompany.MyDataObject;
公共类CXFClientsLtest{
公共静态void main(字符串[]args){
试一试{
QName服务_NAME=新的QName(“http://server/schemas/services“,“我的服务”);
URL wsdlURL=新URL(“https://localhost:8443/services/MyService?wsdl");
MyService ss=新的MyService(wsdlURL,服务名称);
MyServicePortType端口=ss.getMyServicePort();
IdHolder mensagem=新IdHolder();
测量设置ID(1L);
MyDataObject dataObject=port.getById(mensagem);
System.out.println(“Id:+dataObject.getId());
}捕获(例外e){
e、 printStackTrace();
}
}
}
这是我的客户发送他的证书:

package.com.mycompany;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.URL;
导入java.security.KeyStore;
导入java.security.KeyStoreException;
导入java.security.NoSuchAlgorithmException;
导入java.security.UnrecoverableKeyException;
导入java.security.cert.CertificateException;
导入javax.net.ssl.KeyManager;
导入javax.net.ssl.KeyManagerFactory;
导入javax.net.ssl.TrustManager;
导入javax.net.ssl.TrustManagerFactory;
导入javax.xml.namespace.QName;
导入org.apache.cxf.configuration.jsse.TLSClientParameters;
导入org.apache.cxf.endpoint.Client;
导入org.apache.cxf.frontend.ClientProxy;
导入org.apache.cxf.transport.http.httpconductor;
公共类CXFClientsLtest{
公共静态void main(字符串[]args){
试一试{
QName服务_NAME=新的QName(“http://server/schemas/services“,“我的服务”);
URL wsdlURL=新URL(“https://localhost:8443/services/MyService?wsdl");
MyService ss=新的MyService(wsdlURL,服务名称);
MyServicePortType端口=ss.getMyServicePort();
尖沙咀(港口);
IdHolder mensagem=新IdHolder();
测量设置ID(1L);
MyDataObject dataObject=port.getById(mensagem);
System.out.println(“Id:+dataObject.getId());
}捕获(例外e){
e、 printStackTrace();
}
}
publicstaticvoidtslit(MyServicePortType端口)抛出KeyStoreException、nosuchagorithmException、certificateeException、IOException、,
不可恢复的密钥异常{
Client Client=ClientProxy.getClient(端口);
httpconductor http=(httpconductor)client.getconductor();
TLSClientParameters TLSClientParameters=http.getTlsClientParameters();
KeyStore KeyStore=getKeyStore();
密钥库信任库=getTrustStore();
KeyManagerFactory KeyManagerFactory=KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
TrustManagerFactory TrustManagerFactory=TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
init(keyStore,“123456”.toCharArray());
KeyManager[]keyMgrs=keyManagerFactory.getKeyManagers();
tlsClientParameters.setKeyManager(keyMgrs);
init(信任库);
TrustManager[]TrustManager=trustManagerFactory.GetTrustManager();
tlsClientParameters.setTrustManager(TrustManager);
What is your first and last name?
 [Unknown]:  localhost
tlsClientParameters.setUseHttpsURLConnectionDefaultSslSocketFactory(false);
<http:conduit id="{Namespace}PortName.http-conduit"> 
<http:tlsClientParameters>
...
<sec:trustManagers>
  <sec:keyStore type="JKS"
                password="StorePass"
                file="certs/truststore.jks"/>
</sec:trustManagers>
 ...
</http:tlsClientParameters>
</http:conduit>