suchen
Heim类库下载java类库Der Java-Keystore implementiert die bidirektionale SSL-Authentifizierung [Client ist PHP und Java]

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
maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="D:/SSL/server/tomcat.keystore"
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.

2. Importieren Sie client.p12 in das persönliche Zertifikatelement des Browsers.

Geben Sie jetzt https://127.0.0.1:8443/ ein und eine Zertifikatsauswahl wird angezeigt. Klicken Sie auf „OK“ und Sie werden gefragt, ob die https-Seite nicht sicher ist oder nicht. Der Server ist nun eingerichtet.

3.java ruft die Serverseite auf und lädt den Code direkt hoch:

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());
}
     }  
}
Direkt über die Befehlszeile ausführen oder mit der rechten Maustaste auf Ausführen als klicken Das Protokoll wird gedruckt, solange der Anruf erfolgt. Nach der Ausführung

Bitte beachten Sie den Anhang.

Hier kommt der entscheidende Punkt: Der PHP-SoapClient erkennt nur Zertifikate im DER-, PEM- oder ENG-Format, daher muss client.p12 in eine PEM-Datei konvertiert werden In diesem Fall verwenden Sie bei OpenSSL zunächst die Befehlszeile cmd und geben Sie den folgenden Code ein:

Java-Code

openssl pkcs12 -in D:\SSL\client\client.p12 -out D:\SSL\client\client-cer.pem -clcerts
Wenn der Prompt-OpenSSL-Befehl nicht erkannt wird, Dies bedeutet, dass Sie openssl nicht installiert haben. Nach der Eingabe werden Sie aufgefordert, das Passwort für die exportierte Datei cer.pe einzugeben sind fertig. Client-cer.pem wurde erfolgreich generiert! .

Geben Sie nun den PHP-Code ein:

PHP-Code

$params = array(&#39;id&#39; => &#39;2&#39;);  
  
    $local_cert = "./client-cer.pem";  
    set_time_limit(0);  
    try{  
        //ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache  
        $wsdl=&#39;https://192.168.1.146:8443/pro/ws/getInfoService?wsdl&#39;;  
    //  echo file_get_contents($wsdl);  
          
        $soap=new SoapClient($wsdl,   
                    array(  
                        &#39;trace&#39;=>true,  
                        &#39;cache_wsdl&#39;=>WSDL_CACHE_NONE,   
                        &#39;soap_version&#39;   => SOAP_1_1,   
                        &#39;local_cert&#39; => $local_cert, //client证书信息  
                        &#39;passphrase&#39;=> &#39;client&#39;, //密码  
                       // &#39;allow_self_signed&#39;=> true  
                    )  
                );  
        $result=$soap->sayHello($params);  
        $result_json= json_encode($result);  
        $result= json_decode($result_json,true);  
        echo &#39;结果为:&#39; . json_decode($result[&#39;return&#39;],true);  
    }catch(Exception $e) {  
        $result[&#39;success&#39;] = &#39;0&#39;;  
        $result[&#39;msg&#39;] = &#39;请求超时&#39;;  
        echo $e->getMessage();  
    }  
    echo &#39;>>>>>>>>>>>&#39;;

 直接运行,也会出现附件中的结果,打完收工,憋了我整整三天时间,终于搞定了。


Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

PHPStorm Mac-Version

PHPStorm Mac-Version

Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung