一、https+xml服务端编写
1.1 创建证书文件
1.1.1 创建服务器KeyStore
- keytool-genkey-aliasserver_jks_cennavi-keyalgRSA-keypass123456-storepass123456-keystoreserver.jks-validity3650
1.1.2 导出服务端证书
copy
keytool-export-trustcacerts-aliasserver_jks_cennavi-fileserver.cer-keystoreserver.jks-storepass123456
1.1.3 创建客户端KeyStore
copy
keytool-genkey-aliasclient_p12_cennavi-keyalgRSA-keypass123456-storepass123456-keystoreclient.p12-validity3650-storetypePKCS12
1.1.4 导出客户端Cer证书
keytool-export-trustcacerts-aliasclient_p12_cennavi-fileclient.cer-keystoreclient.p12-storepass123456-storetypePKCS12
1.3.3 启动服务端
启动服务端tomcat。服务端的访问地址为:https://127.0.0.1:8843/testhttps/interface
二、https+xml客户端编写
2.1 编写客户端java代码,示例如下:
copy
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importorg.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
importorg.apache.commons.httpclient.HttpClient;
importorg.apache.commons.httpclient.HttpStatus;
importorg.apache.commons.httpclient.methods.PostMethod;
importorg.apache.commons.httpclient.methods.StringRequestEntity;
importorg.apache.commons.httpclient.params.HttpMethodParams;
importorg.dom4j.Document;
publicclassTestReqServletextendsHttpServlet
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
StringsURL="https://127.0.0.1:8443/testhttps/interface";
Stringxml=
"<?xmlversion='1.0'encoding='UTF-8'?><ecity><msgname>loginReq</msgname><timestamp>20140422094111</timestamp><svccont><token>112255</token></svccont></ecity>";
toHTTPS(sURL,xml);
publicStringtoHTTPS(StringsURL,Stringxml)
throwsIOException
sURL="https://127.0.0.1:8443/testhttps/interface";
System.setProperty("javax.net.ssl.trustStore","C:UsershsinghsuDesktophttpsclient.jks");
System.setProperty("javax.net.ssl.trustStorePassword","123456");
System.setProperty("javax.net.ssl.keyStoreType","PKCS12");
System.setProperty("javax.net.ssl.keyStore","C:UsershsinghsuDesktophttpsclient.p12");
System.setProperty("javax.net.ssl.keyStorePassword","123456");
StringresultXML="";
HttpClienthttpClient=null;
PostMethodpostMethod=null;
httpClient=newHttpClient();
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(30000);
httpClient.getHttpConnectionManager().getParams().setSoTimeout(30000);
postMethod=newPostMethod(sURL);
postMethod.setRequestEntity(newStringRequestEntity(xml,"text/html","UTF-8"));
postMethod.setRequestHeader("Content-Type","text/xml;charset=UTF-8");
postMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,newDefaultHttpMethodRetryHandler());
intstatusCode=httpClient.executeMethod(postMethod);
if(statusCode!=HttpStatus.SC_OK)
System.out.println("Callmethodfailed:"+postMethod.getStatusLine());
BufferedReaderin=null;
try
in=newBufferedReader(newInputStreamReader(postMethod.getResponseBodyAsStream(),"utf-8"));
SAXReadersaxReader=newSAXReader();
Documentdoc=saxReader.read(newInputStreamReader(postMethod.getResponseBodyAsStream(),255)"> resultXML=doc.asXML();
catch(IOExceptione)
e.printStackTrace();
finally
if(in!=null)
in.close();
catch(Exceptione)
if(postMethod!=null)
postMethod.releaseConnection();
returnresultXML;
}
配置完成后使用servlet访问即可测试
三、soapUI测试https+xml接口
打开soapUI,File-->Preferences-->SSL Settings,导入client.p12,输入密码即可
注:以上配置为https双向验证,若只要https服务端的单向验证,则去掉client.p12 SOAPUI配置证书即可。