例外情報は次のとおりです:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました: sun.security.provider.certpath.SunCertPathBuilderException: 要求されたターゲットへの有効な証明書パスが見つかりません
原因: サーバーの証明書が信頼されていません。これは一般的に引き起こされます。
KEYTOOL ツールを使用して証明書を作成し、それを TOMCAT で起動すると、証明書が信頼されていないことを示すプロンプトが表示されます。もちろん、HTTPCLIENT を使用してサーバー HTTPS にデータを送信する場合、HTTPCLIENT はサーバーの証明書が信頼できるかどうかも検出します。信頼できない場合は、上記の例外がスローされます。
解決策は 2 つあります。1 つは、証明書をクライアントによって信頼されるようにすることです。もう 1 つは、HTTPCLIENT を使用して、サーバー証明書が信頼できるかどうかを確認せずにデータを送信する方法です。
最初の方法は、証明書を信頼できるものにすることです。
証明書を発行する正式な CA を見つけるか、自分で証明書を発行します (証明書はそのクライアントでのみ信頼できます)。証明書を発行するための正式な CA を見つけることについては説明しません。証明書を自分で発行する方法については、私の他の記事を参照してください。
自分で署名した証明書の作成が完了した後、クライアントからサーバーのアドレスを開くと、上記のエラーは表示されなくなりましたが、依然としてデータを送信できないことがわかりました。理由は何ですか?証明書はクライアント オペレーティング システムでは信頼されていますが、JAVA の KEYSTORE では信頼されていないため、サーバーの証明書を KEYSTORE ライブラリにインポートする必要があります
インポート方法:
コマンド ライン ウィンドウを開き、
keytool -import -noprompt -keystore cacerts -storepass changeit -alias yourEntry1 -file your.cer
最後の証明書はサーバーによってエクスポートされた証明書で、他の証明書は次のとおりです。債務不履行になる。
クライアント コンピュータに多数の JAVA バージョンがインストールされている場合は、インポートする証明書の JAVA バージョンが TOMCAT で使用されているものであることを確認してください。通常、TOMCAT は が指す JAVA バージョンを使用します。環境変数。
ECLIPSE で作成された TOMCAT サーバーの場合、新しいものを作成するときに、デフォルトの JRE または指定された JAVA を選択するように求められます。それ以外の場合は、インポートしたばかりの JAVA を指すパスを選択する必要があります。インポートしても効果はありません。
2 番目の方法は、HTTPCLIENT を使用するときにサーバー証明書が信頼できるかどうかを確認しないことです
証明書を自動的に受け入れるように HttpClient クラスを拡張します
このメソッドはすべての証明書を自動的に受信するため、特定のセキュリティ上の問題がありますしたがって、この方法を使用する前に、システムのセキュリティ要件を慎重に検討してください。具体的な手順は次のとおりです。
• カスタム ソケット ファクトリ (test.MySecureProtocolSocketFactory) を提供します。このカスタム クラスは、org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory インターフェイスを実装し、そのインターフェイスを実装するクラスでカスタム X509TrustManager (test.MyX509TrustManager) を呼び出す必要があります。これらの 2 つのクラスは、この記事に添付されている添付ファイルで入手できます。
•org.apache.commons.httpclient.protocol.Protocol のインスタンスを作成し、プロトコル名とデフォルトのポート番号を指定します
Protocol myhttps = new Protocol("https", new MySecureProtocolSocketFactory (), 443);
•作成した https プロトコル オブジェクトを登録します
Protocol.registerProtocol("https ", myhttps);
•その後、通常のプログラミング方法に従って https のターゲット アドレスを開きます。コードは次のとおりです:
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[]{}; } } }

C#.NETの設計パターンには、Singletonパターンと依存関係の注入が含まれます。 1.シングルトンモードは、クラスに1つのインスタンスしかないことを保証します。これは、グローバルアクセスポイントが必要なシナリオに適していますが、安全性と虐待の問題をスレッドすることに注意する必要があります。 2。依存関係の噴射により、依存関係を注入することにより、コードの柔軟性とテスト可能性が向上します。多くの場合、コンストラクターの注入に使用されますが、複雑さを高めるために過度の使用を避ける必要があります。

C#.NETは、ゲーム開発、金融サービス、モノのインターネット、クラウドコンピューティングの分野で現代世界で広く使用されています。 1)ゲーム開発では、C#を使用してUnityエンジンを介してプログラムします。 2)金融サービスの分野では、C#.NETが高性能取引システムとデータ分析ツールの開発に使用されます。 3)IoTおよびクラウドコンピューティングに関して、C#.NETはAzure Servicesを通じてサポートを提供して、デバイス制御ロジックとデータ処理を開発します。

.NETFRAMEWORKISWINDOWS-CENTRIC、while.netcore/5/6supportscross-platformdevelopment.1).netframework、2002年以来、isidealforwindowsprimitedincross-platformcapabilities.2).netcore、andtseverutions(andtseverutions(andtseverution)

C#.NET開発者コミュニティは、次のような豊富なリソースとサポートを提供します。1。Microsoftの公式文書、2。StackoverflowやRedditなどのコミュニティフォーラム、3。Githubのオープンソースプロジェクト。これらのリソースは、開発者が基本的な学習から高度なアプリケーションまでプログラミングスキルを向上させるのに役立ちます。

C#.NETの利点には以下が含まれます。1)非同期プログラミングなどの言語機能により、開発が簡素化されます。 2)パフォーマンスと信頼性、JITコンピレーションとゴミ収集メカニズムによる効率の向上。 3)クロスプラットフォームサポート、.NetCoreはアプリケーションシナリオを拡張します。 4)Webからデスクトップ、ゲーム開発までの優れたパフォーマンスを備えた幅広い実用的なアプリケーション。

C#は常に.NETに結び付けられているわけではありません。 1)C#は、モノランタイム環境で実行でき、LinuxおよびMacOSに適しています。 2)Unityゲームエンジンでは、C#はスクリプトに使用され、.NETフレームワークに依存しません。 3)C#は、.NetMicRoframeworkなどの埋め込みシステム開発にも使用できます。

C#は、.NETエコシステムで中核的な役割を果たし、開発者にとって好ましい言語です。 1)C#は、C、C、Javaの利点を組み合わせた効率的で使いやすいプログラミング方法を提供します。 2).NETランタイム(CLR)を介して実行して、効率的なクロスプラットフォーム操作を確保します。 3)C#は、LINQや非同期プログラミングなどの基本的な使用から高度な使用をサポートします。 4)最適化とベストプラクティスには、StringBuilderおよび非同期プログラミングを使用して、パフォーマンスと保守性を向上させることが含まれます。

C#は、2000年にMicrosoftがリリースしたプログラミング言語で、CのパワーとJavaのシンプルさを組み合わせることを目指しています。 1.C#は、カプセル化、継承、多型をサポートするタイプセーフ、オブジェクト指向のプログラミング言語です。 2. C#のコンパイルプロセスは、コードを中間言語(IL)に変換し、.NETランタイム環境(CLR)でマシンコード実行にコンパイルします。 3. C#の基本的な使用法には、可変宣言、制御フロー、関数の定義が含まれ、高度な使用法には非同期プログラミング、LINQ、およびデリゲートなどが含まれます。4。一般的なエラーには、デバッガー、例外処理、ロギングを介してデバッグできるタイプミスマッチおよびヌル参照の例外が含まれます。 5.パフォーマンスの最適化の提案には、LINQの使用、非同期プログラミング、およびコードの読み取り可能性の向上が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
