


Ausnahme, wenn httpclient Daten an HTTPS sendet, um eine SSL-Verbindung herzustellen
Die Ausnahmeinformationen lauten wie folgt:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX-Pfadaufbau fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException: nicht gefunden gültiger Zertifizierungspfad zum angeforderten Ziel
Ursache: Das Zertifikat des Servers ist nicht vertrauenswürdig. Dies wird im Allgemeinen verursacht.
Verwenden Sie das KEYTOOL-Tool, um ein Zertifikat zu erstellen, und starten Sie es dann mit TOMCAT. Wenn der Browser die Website öffnet, erscheint eine Meldung, dass das Zertifikat nicht vertrauenswürdig ist. Wenn HTTPCLIENT zum Senden von Daten an den Server HTTPS verwendet wird, erkennt HTTPCLIENT natürlich auch, ob das Zertifikat des Servers vertrauenswürdig ist. Wenn es nicht vertrauenswürdig ist, wird die obige Ausnahme ausgelöst.
Es gibt zwei Lösungen: Die eine besteht darin, das Zertifikat für den Client vertrauenswürdig zu machen. Die andere besteht darin, HTTPCLIENT zum Senden von Daten zu verwenden, ohne zu prüfen, ob das Serverzertifikat vertrauenswürdig ist.
Die erste Methode besteht darin, das Zertifikat vertrauenswürdig zu machen.
Suchen Sie eine formelle Zertifizierungsstelle, um ein Zertifikat auszustellen, oder stellen Sie das Zertifikat selbst aus (es kann nur auf diesem Client als vertrauenswürdig eingestuft werden). Ich werde nicht darüber sprechen, eine formelle Zertifizierungsstelle für die Ausstellung eines Zertifikats zu finden. Informationen dazu, wie Sie selbst ein Zertifikat ausstellen können, finden Sie in meinen anderen Artikeln.
Ich habe festgestellt, dass nach dem Ausfüllen des von mir selbst signierten Zertifikats beim Öffnen der Serveradresse vom Client aus der obige Fehler nicht mehr angezeigt wurde, ich aber immer noch keine Daten senden konnte. Was ist der Grund? Da das Zertifikat auf dem Client-Betriebssystem vertrauenswürdig ist, im KEYSTORE von JAVA jedoch nicht, müssen Sie das Zertifikat des Servers in die KEYSTORE-Bibliothek importieren
Importmethode:
Öffnen Sie ein Befehlszeilenfenster, gehen Sie zum Verzeichnis
keytool -import -noprompt -keystore cacerts -storepass changeit -alias yourEntry1 -file your.cer
Das letzte ist das vom Server exportierte Zertifikat, die anderen können standardmäßig verwendet werden.
Wenn auf dem Client-Computer viele JAVA-Versionen installiert sind, stellen Sie sicher, dass die JAVA-Version des von Ihnen importierten Zertifikats diejenige ist, die von Ihrem TOMCAT verwendet wird. TOMCAT verwendet die Umgebung Die JAVA-Version, auf die die Variable zeigt.
Wenn es sich um einen in ECLIPSE erstellten TOMCAT-Server handelt, werden Sie beim Erstellen eines neuen Servers aufgefordert, die Standard-JRE oder die verwiesene JAVA auszuwählen. Andernfalls müssen Sie den Pfad auswählen, der auf die soeben importierte JAVA verweist. Die von Ihnen importierte Zertifikatsbibliothek hat ebenfalls keine Auswirkung.
Die zweite Methode besteht nicht darin, zu prüfen, ob das Serverzertifikat bei Verwendung von HTTPCLIENT vertrauenswürdig ist
Erweitern Sie die HttpClient-Klasse, um das Zertifikat automatisch zu akzeptieren
Da diese Methode automatisch alle Zertifikate empfängt, gibt es bestimmte Sicherheitsprobleme. Bitte prüfen Sie daher sorgfältig die Sicherheitsanforderungen Ihres Systems, bevor Sie diese Methode verwenden. Die spezifischen Schritte lauten wie folgt:
• Stellen Sie eine benutzerdefinierte Socket-Factory bereit (test.MySecureProtocolSocketFactory). Diese benutzerdefinierte Klasse muss die Schnittstelle org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory implementieren und den benutzerdefinierten X509TrustManager (test.MyX509TrustManager) in der Klasse aufrufen, die die Schnittstelle implementiert. Diese beiden Klassen können im Anhang zu diesem Artikel abgerufen werden.
• Erstellen Sie eine Instanz von org.apache.commons.httpclient.protocol.Protocol, geben Sie den Protokollnamen und die Standardportnummer an.
Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory ( ), 443);
•Registrieren Sie das soeben erstellte https-Protokollobjekt
Protocol.registerProtocol("https ", myhttps);
•Öffnen Sie dann die Zieladresse von https gemäß der normalen Programmiermethode. Der Code lautet wie folgt:
MySecureProtocolSocketFactory.java
import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.SocketFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.commons.httpclient.ConnectTimeoutException; import org.apache.commons.httpclient.params.HttpConnectionParams; import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory; public class MySecureProtocolSocketFactory implements SecureProtocolSocketFactory { private SSLContext sslcontext = null; private SSLContext createSSLContext() { SSLContext sslcontext=null; try { sslcontext = SSLContext.getInstance("SSL"); sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (KeyManagementException e) { e.printStackTrace(); } return sslcontext; } private SSLContext getSSLContext() { if (this.sslcontext == null) { this.sslcontext = createSSLContext(); } return this.sslcontext; } public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket( socket, host, port, autoClose ); } public Socket createSocket(String host, int port) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket( host, port ); } public Socket createSocket(String host, int port, InetAddress clientHost, int clientPort) throws IOException, UnknownHostException { return getSSLContext().getSocketFactory().createSocket(host, port, clientHost, clientPort); } public Socket createSocket(String host, int port, InetAddress localAddress, int localPort, HttpConnectionParams params) throws IOException, UnknownHostException, ConnectTimeoutException { if (params == null) { throw new IllegalArgumentException("Parameters may not be null"); } int timeout = params.getConnectionTimeout(); SocketFactory socketfactory = getSSLContext().getSocketFactory(); if (timeout == 0) { return socketfactory.createSocket(host, port, localAddress, localPort); } else { Socket socket = socketfactory.createSocket(); SocketAddress localaddr = new InetSocketAddress(localAddress, localPort); SocketAddress remoteaddr = new InetSocketAddress(host, port); socket.bind(localaddr); socket.connect(remoteaddr, timeout); return socket; } } //自定义私有类 private static class TrustAnyTrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } } }

Der Programmierungsprozess von C# in .NET enthält die folgenden Schritte: 1) Schreiben von C# Code, 2) Kompilieren in eine mittlere Sprache (IL) und 3), die durch die .NET -Laufzeit (CLR) ausführt. Die Vorteile von C# in .NET sind die moderne Syntax, das leistungsstarke Typsystem und die enge Integration in das .NET -Framework, das für verschiedene Entwicklungsszenarien geeignet ist, von Desktop -Anwendungen bis hin zu Webdiensten.

C# ist eine moderne, objektorientierte Programmiersprache, die von Microsoft und als Teil des .NET-Frameworks entwickelt wurde. 1.C# unterstützt die objektorientierte Programmierung (OOP), einschließlich Einkapselung, Vererbung und Polymorphismus. 2. Asynchrones Programmieren in C# wird über Async implementiert und wartet auf Schlüsselwörter, um die Reaktionsfähigkeit der Anwendungen zu verbessern. 3.. Verwenden Sie LINQ, um Datensammlungen präzise zu verarbeiten. 4. Häufige Fehler umfassen Null-Referenzausnahmen und Indexausnahmen außerhalb des Bereichs. Zu den Debugging -Fähigkeiten gehört die Verwendung eines Debuggers und Ausnahmeberechnung. 5. Leistungsoptimierung umfasst die Verwendung von StringBuilder und das Vermeiden von unnötigem Packung und Unboxing.

Die Teststrategien für C#.NET-Anwendungen umfassen Unit-Tests, Integrationstests und End-to-End-Tests. 1. Unit -Test stellt sicher, dass die Mindesteinheit des Codes unter Verwendung des Frameworks MStest, Nunit oder Xunit unabhängig funktioniert. 2. Integrierte Tests überprüfen die Funktionen mehrerer Einheiten kombinierter, häufig verwendeten simulierten Daten und externen Diensten. 3. End-to-End-Tests simuliert den vollständigen Betriebsprozess des Benutzers, und Selen wird normalerweise für automatisierte Tests verwendet.

Das Interview mit C# Senior Developer erfordert das Mastering von Kernwissen wie asynchrones Programmieren, LINQ und interne Arbeitsprinzipien von .NET -Frameworks. 1. Asynchrones Programmieren vereinfacht die Operationen durch Async und wartet auf die Verbesserung der Anwendungsreaktionsfähigkeit. 2.LinQ betreibt Daten im SQL -Stil und achtet auf die Leistung. 3. Die CLR des Net -Frameworks verwaltet den Speicher, und die Müllsammlung muss mit Vorsicht verwendet werden.

C#.NET -Interviewfragen und Antworten umfassen Grundkenntnisse, Kernkonzepte und erweiterte Nutzung. 1) Grundkenntnisse: C# ist eine von Microsoft entwickelte objektorientierte Sprache und wird hauptsächlich im .NET-Framework verwendet. 2) Kernkonzepte: Delegation und Ereignisse ermöglichen dynamische Bindungsmethoden, und LINQ bietet leistungsstarke Abfragefunktionen. 3) Erweiterte Verwendung: Asynchrone Programmierung verbessert die Reaktionsfähigkeit und Expressionsbäume werden für die dynamische Codekonstruktion verwendet.

C#.NET ist eine beliebte Wahl für den Aufbau von Microservices aufgrund seines starken Ökosystems und seiner umfangreichen Unterstützung. 1) Erstellen Sie Rastfulapi mit ASP.NetCore, um die Erstellung und Abfrage der Reihenfolge zu verarbeiten. 2) Verwenden Sie GRPC, um eine effiziente Kommunikation zwischen Microservices zu erreichen, und implementieren Sie Auftragsdienste. 3) Vereinfachen Sie die Bereitstellung und Verwaltung durch Microservices mit Docker Container.

Zu den Best Practices für C# und .NET gehören die Eingabeüberprüfung, die Ausgabecodierung, die Ausnahmebehandlung sowie die Authentifizierung und Autorisierung. 1) Verwenden Sie regelmäßige Ausdrücke oder integrierte Methoden, um die Eingaben zu überprüfen, um zu verhindern, dass bösartige Daten in das System eintreten. 2) Ausgangscodierung Um XSS -Angriffe zu verhindern, verwenden Sie die Methode httputility.htmlencode. 3) Ausnahmebehandlung vermeidet Informationen, die Leckagen aufzeichnen, Fehler aufzeichnen, jedoch keine detaillierten Informationen an den Benutzer zurückgeben. 4) Verwenden Sie ASP.Netidentity- und Schadensbasis-Berechtigung, um Anwendungen vor nicht autorisierten Zugriff zu schützen.

Die Bedeutung von Dickdarm (':') In c Sprache: Bedingte Aussage: Trennung bedingter Ausdrücke und Anweisung Block Loop Anweisung: Trennung der Initialisierung, bedingte und inkrementelle Expression Makrodefinition: Trennung von Makronamen und Makrowert Einzelzeilen -Kommentar: Darstellung des Inhalts vom Kolon bis zum Ende der Zeile als Kommentararraydimension: Geben


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

EditPlus chinesische Crack-Version
Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion