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

Der Java-Keystore implementiert die bidirektionale SSL-Authentifizierung [Client ist PHP und Java]

Nov 09, 2016 pm 02:30 PM
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());
}
     }  
}
Nach dem Login kopieren
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
Nach dem Login kopieren
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;;
Nach dem Login kopieren

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


Erklärung dieser Website
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ßer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

See all articles