1. Erstellen Sie zunächst die serverseitige Umgebung:
Vorbereitungsarbeit: ein Tomcat6-, JDK7-, OpenSSL-, Javawebservice-Testprojekt
2. Konstruktionsprozess:
Referenz http: //blog.csdn.net/chow__zh/article/details/8998499
1.1 Serverzertifikat generieren
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:/SSL / server/tomcat.keystore -dname "CN=127.0.0.1,OU=zlj,O=zlj,L=Peking,ST=Peking,C=CN" -validity 3650 -storepass zljzlj -keypass zljzlj
Hinweis:
keytool ist das vom JDK bereitgestellte Tool zur Zertifikatserstellung. Weitere Informationen zur Verwendung aller Parameter finden Sie unter keytool –help
-genkey zum Erstellen eines neuen Zertifikats
-v 🎜>-alias tomcat mit „tomcat“ als Alias des Zertifikats. Hier können Sie den
-keyalg RSA-spezifizierten Algorithmus
-keystore D:/SSL/server/tomcat.keystore Speicherpfad und Dateinamen ändern
-dname "CN=127.0.0.1,OU=zlj,O = zlj,L=Peking,ST=Peking,C=CN“ Die Identität des Zertifikatausstellers. Der CN muss hier nach der Ausstellung mit dem Zugriffsdomänennamen übereinstimmen. Da wir das Zertifikat aber selbst ausstellen, wird es dennoch eine Warnung geben, wenn Sie in einem Browser darauf zugreifen.
-validity 3650 Zertifikatsgültigkeitsdauer, in Tagen
-storepass zljzlj Zertifikatszugriffspasswort
-keypass zljzlj privater Zertifikatsschlüssel
1.2 Client-Zertifikat generieren
Befehl ausführen:
keytool ‐genkey ‐ v ‐Alias Client ‐keyalg RSA ‐storetype PKCS12 ‐keystore D:/SSL/client/client.p12 ‐dname „CN=client,OU=zlj,O=zlj,L=bj,ST=bj,C =CN“ ‐ Gültigkeit 3650 ‐storepass client ‐keypass client
Beschreibung:
Parameterbeschreibung ist die gleiche wie oben. Die Identität des -dname-Zertifikatausstellers kann sich von der vorherigen unterscheiden. Bisher besteht zwischen diesen beiden Zertifikaten keine Beziehung. Als nächstes gilt es, eine Vertrauensbeziehung zwischen den beiden aufzubauen.
1.3 Client-Zertifikat exportieren
Befehl ausführen:
keytool ‐export ‐alias client ‐keystore D:/SSL/client/client.p12 ‐storetype PKCS12 ‐storepass client ‐rfc ‐file D:/SSL/ client /client.cer
Beschreibung:
-export Export ausführen
-Datei Dateipfad der Exportdatei
1.4 Das Client-Zertifikat zur Serverzertifikat-Vertrauensliste hinzufügen
Befehl ausführen:
keytool ‐import ‐alias client ‐v ‐file D:/SSL/client/client.cer ‐keystore D:/SSL/server/tomcat.keystore ‐storepass zljzlj
Beschreibung:
Parameterbeschreibung ist die gleiche wie zuvor . Das hier angegebene Passwort ist das Zugangspasswort für das Serverzertifikat.
1.5 Serverzertifikat exportieren
Führen Sie den Befehl aus:
keytool -export -alias tomcat -keystore D:/SSL/server/tomcat.keystore -storepass zljzlj -rfc -file D:/SSL/server/ tomcat .cer
Anleitung:
Exportieren Sie das Serverzertifikat. Das hier angegebene Passwort ist gleichzeitig das Passwort für das Serverzertifikat.
1.6 Client-Vertrauensliste erstellen
Befehl ausführen:
keytool -import -file D:/SSL/server/tomcat.cer -storepass zljzlj -keystore D:/SSL/client/client.truststore -alias tomcat –noprompt
Anweisungen:
Lassen Sie den Client dem Serverzertifikat vertrauen
2. Konfigurieren Sie den Server so, dass er nur HTTPS-Verbindungen zulässt
2.1 Konfigurieren Sie /conf/server.xml im Tomcat-Verzeichnis
Xml-Code Sammlungscode
keystorePass="zljzlj" truststoreFile="D:/SSL/server/tomcat.keystore"
truststorePass="zljzlj" / >
Hinweis:
Dieser Inhalt in server.xml wurde ursprünglich auskommentiert. Wenn Sie den Standardport 443 von https verwenden möchten, ändern Sie bitte den Portparameter hier. ClientAuth="true" gibt die bidirektionale Zertifikatauthentifizierung an.
package test; import javax.xml.namespace.QName; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; /** * * @author gshen * */ public class TestEcVoteNotice { public static void main(String [] args) throws Exception { System.setProperty("javax.net.ssl.trustStorePassword","zljzlj"); System.setProperty("javax.net.ssl.keyStoreType","PKCS12") ; System.setProperty("javax.net.ssl.keyStore","D:/SSL/client/client.p12") ; System.setProperty("javax.net.ssl.keyStorePassword","client") ; System.setProperty("javax.net.debug", "all"); //wsdl地址 String endpoint = "https://192.168.1.146:8443/pro/ws/getInfoService?wsdl"; //http://jarfiles.pandaidea.com/ 搜索axis.jar并下载,Service类在axis.jar Service service = new Service(); //http://jarfiles.pandaidea.com/ 搜索axis.jar并下载,Call类在axis.jar Call call = null; try { call = (Call) service.createCall(); //设置Call的调用地址 call.setTargetEndpointAddress(new java.net.URL(endpoint)); //根据wsdl中 <wsdl:import location="https://192.168.10.24:8443/ShinService/HelloWorld?wsdl=HelloService.wsdl" //namespace="http://server.cxf.shinkong.cn/" /> , //<wsdl:operation name="findALL"> call.setOperationName(new QName("http://ws.task.xm.com/","sayHello")); //参数1对应服务端的@WebParam(name = "tableName") 没有设置名称为arg0 call.addParameter("id", XMLType.SOAP_STRING, javax.xml.rpc.ParameterMode.IN); //调用方法的返回值 call.setReturnType(org.apache.axis.Constants.XSD_STRING); //调用用Operation调用存储过程(以服务端的方法为准) String res = (String) call.invoke(new Object[] {"1"}); //调用存储过程 System.out.println(res); } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } } }
openssl pkcs12 -in D:\SSL\client\client.p12 -out D:\SSL\client\client-cer.pem -clcerts
$params = array('id' => '2'); $local_cert = "./client-cer.pem"; set_time_limit(0); try{ //ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache $wsdl='https://192.168.1.146:8443/pro/ws/getInfoService?wsdl'; // echo file_get_contents($wsdl); $soap=new SoapClient($wsdl, array( 'trace'=>true, 'cache_wsdl'=>WSDL_CACHE_NONE, 'soap_version' => SOAP_1_1, 'local_cert' => $local_cert, //client证书信息 'passphrase'=> 'client', //密码 // 'allow_self_signed'=> true ) ); $result=$soap->sayHello($params); $result_json= json_encode($result); $result= json_decode($result_json,true); echo '结果为:' . json_decode($result['return'],true); }catch(Exception $e) { $result['success'] = '0'; $result['msg'] = '请求超时'; echo $e->getMessage(); } echo '>>>>>>>>>>>';
直接运行,也会出现附件中的结果,打完收工,憋了我整整三天时间,终于搞定了。